# -*- coding: utf-8 -*-
# @Time : 2019/11/4 14:48
# @Author : John
# @Email : 2398344557@qq.com
# @File : 變量.py
# @Software: PyCharm
在Python中,每個(gè)變量在使用前必須進(jìn)行賦值,變量賦值以后,該變量才會(huì)被創(chuàng)建,否則會(huì)報(bào)錯(cuò)。
情況一:定義了變量而沒有對(duì)其賦值,引用該變量后,輸出的是空值;
情況二:沒有定義且沒有賦值,引用不存在的變量時(shí),直接報(bào)錯(cuò)。
定義一個(gè)變量就像申請(qǐng)一個(gè)教室,學(xué)生可以進(jìn)來,也可以離開,是一個(gè)可變換的過程(not寫死)。
格式:變量名 = 值 (等號(hào)為賦值符號(hào),等號(hào)兩邊各留一個(gè)空格,美觀)
- 中文變量命名:
名字變量 = "雪碧"
print(名字變量)
—— 雪碧
# 結(jié)論:中文變量命名只能在Python3中使用,但是不推薦
- 英文變量命名:
【實(shí)例1】學(xué)生注冊(cè)
# 定義變量
studentNumber = '9527' # 定義學(xué)生學(xué)號(hào)
studentPassWard = '709394' # 定義學(xué)生密碼
# 使用print()內(nèi)置函數(shù)輸出
print(studentNumber) # 單獨(dú)輸出studentNumber
print(studentPassword) # 單獨(dú)輸出studentPassword
—— 9527
709394
# -----------------------------------------------------------------------
# ***拓展***
# 1. 一次輸出多個(gè)變量,中間用逗號(hào)隔開,可解決自動(dòng)換行問題,例:print(a, b, c, ...)
print(studentNumber, studentPassWard) # 輸出studentNumber和studentPassword
—— 9527 709394
# 2. 每次輸出都是默認(rèn)換行的,如果不需要換行,可以將end參數(shù)設(shè)置為''
print(studentNumber, end='') # 默認(rèn)end='\n',不需要時(shí)換成end='',即輸出結(jié)果與一次輸出多個(gè)變量形式相似,只是變量之間沒有空格隔開
print(studentPassWard)
—— 9527709394
# 3. 在Python2.x版本中,print并不是一個(gè)函數(shù)。寫法是print "",例:print "hello world"
# 所以,判斷代碼使用的版本的最直接方法,就是看print的格式,所以在網(wǎng)上粘貼時(shí)復(fù)制到本地時(shí)要注意格式的變換,否則會(huì)報(bào)錯(cuò)。
# -----------------------------------------------------------------------
# ***拓展***
# 代碼縮進(jìn)
# python是使用縮進(jìn)例組織代碼塊的,也是官方強(qiáng)制要求的,例如以下聲明是會(huì)報(bào)錯(cuò)的:
studentNumber = '9527'
print(studentNumber)
—— IndentationError: unexpected indent
# 或:
studentNumber ='9527'
print(studentNumber)
—— IndentationError: unexpected indent
# 結(jié)論:必須為同一級(jí),否則會(huì)報(bào)錯(cuò)
【練習(xí)1】超市買菜
# 定義黃瓜的價(jià)格
ccb_price = float(input("please input ccb's price(¥) : "))
# 定義購(gòu)買重量
weight = float(input("please input ccb's weight(kg) : "))
# 計(jì)算金額
money = ccb_price * weight
# 顯示輸出
print('money : ', money)
—— please input ccb's price(¥) : 5.8
please input ccb's weight(kg) : 3.2
money : 18.56
變量的類型
變量的四要素:
- 變量名稱
- 變量保存的數(shù)據(jù)
- 變量存儲(chǔ)數(shù)據(jù)的類型
- 變量的內(nèi)存地址(標(biāo)識(shí))
【練習(xí)2】定義變量保存小強(qiáng)的個(gè)人信息
name = '雪碧' # 姓名:雪碧
age = 22 # 年齡:22歲
sex = True # 性別:男性
height = 1.75 # 身高:1.80米
weight = 54.0 # 體重:77.0公斤
print(type(name))
print(type(age))
print(type(sex))
print(type(height))
print(type(weight))
print(name, age, sex, height, weight)
—— <class 'str'>
<class 'int'>
<class 'bool'>
<class 'float'>
<class 'float'>
雪碧 22 True 1.75 54.0
# 結(jié)論:Python在定義變量時(shí)不需要指定變量類型,變量在運(yùn)行過程中,Python解釋器會(huì)自動(dòng)推導(dǎo)出變量的精確類型,這就是動(dòng)態(tài)語(yǔ)言的特色之一
# 動(dòng)態(tài)語(yǔ)言包括python、javascript、sql等
# 靜態(tài)語(yǔ)言包括c++、c#等
# -----------------------------------------------------------------------
# ***拓展***
# 單步調(diào)試:debug
#選中開始語(yǔ)句,在前面標(biāo)記,然后按F8,或右鍵,或文件右鍵,進(jìn)行單步調(diào)試
#MainThread:主線程
debug顯示效果如下:

變量可按照類型分為數(shù)字類型和非數(shù)字類型
- 數(shù)字類型:整型int、浮點(diǎn)型float、布爾型bool
- 非數(shù)字類型:字符串、列表、元組、字典、集合
可以使用tpye()內(nèi)置函數(shù)查看變量的數(shù)據(jù)類型。
內(nèi)置函數(shù)在Python中直接調(diào)用即可,無需進(jìn)行其他操作。
常見的內(nèi)置函數(shù)有:input()、type()、int()、...
不同變量之間的運(yùn)算
# 1. 在Python中數(shù)字類型變量可以直接進(jìn)行算術(shù)運(yùn)算
# 如果變量是布爾型的話:True ---->1、False ----> 0
# i = 10
# f = 10.1
# b = True
# print(i+f+b) # 自動(dòng)類型轉(zhuǎn)行,轉(zhuǎn)換成浮點(diǎn)數(shù)(系統(tǒng)自動(dòng)選擇精確度最高的)
# —— 21.5
# -----------------------------------------------------------------------
# ***拓展***
# 一行聲明以上的變量(即一一對(duì)應(yīng))
i, f, b = 10, 10.1, True
print(i+f+b) # 類型自動(dòng)轉(zhuǎn)換,即全部轉(zhuǎn)化成了精確度最大的浮點(diǎn)數(shù)(系統(tǒng)會(huì)優(yōu)先選擇精確度最大的數(shù))
—— 21.1
# -----------------------------------------------------------------------
# ***拓展***
# Python中交換變量的值的最快方法:
x = 1314
y = 520
x, y = y, x # 直接調(diào)換變量的位置然后重新賦值即可
print('x=', x, 'y=', y)
—— x= 520 y= 1314
字符拼接
# Python中,字符串之間可以用“+”加號(hào)進(jìn)行拼接,生成新的字符串
first_name = '雪碧'
last_name = '最騷'
print(first_name + last_name) # 輸出兩個(gè)變量拼接后的結(jié)果
—— 雪碧最騷
# -----------------------------------------------------------------------
# ***拓展***
# 數(shù)字和字符串之間不能進(jìn)行鏈接,會(huì)報(bào)錯(cuò):
print(first_name+'的學(xué)號(hào)為:'+ 9527)
——TypeError: can only concatenate str (not "int") to str
# 解決方法一:
print(first_name+'的學(xué)號(hào)為:'+str(9527)) # 使用str()內(nèi)置函數(shù)將int類型的數(shù)據(jù)強(qiáng)制轉(zhuǎn)化為str類型的數(shù)據(jù)
—— 雪碧的學(xué)號(hào)為:9527
# 解決方法二:
print(first_name+'的學(xué)號(hào)為:'+'9527') # 用單引號(hào)或者雙引號(hào)直接把其他類型的數(shù)據(jù)轉(zhuǎn)化為字符串類型的數(shù)據(jù)
—— 雪碧的學(xué)號(hào)為:9527
# -----------------------------------------------------------------------
# +++舉一反三+++
# int() # 強(qiáng)制轉(zhuǎn)化為整型的數(shù)據(jù)
# float() # 強(qiáng)制轉(zhuǎn)化為浮點(diǎn)型的數(shù)據(jù)
# bool() # 強(qiáng)制轉(zhuǎn)化為布爾型的數(shù)據(jù)
# str() # 強(qiáng)制轉(zhuǎn)化為字符串類型的數(shù)據(jù)
# list() # 強(qiáng)制轉(zhuǎn)化為列表類型的數(shù)據(jù)
# tuple() # 強(qiáng)制轉(zhuǎn)化為元組類型的數(shù)據(jù)
# dict() # 強(qiáng)制轉(zhuǎn)化為字典類型的數(shù)據(jù)
# np.array() # 強(qiáng)制轉(zhuǎn)化為矩陣(括號(hào)里一般為列表)
# -----------------------------------------------------------------------
# ***拓展***
# 字符串類型可以和整數(shù)使用*號(hào),可以達(dá)到重復(fù)拼接字符串的效果(即輸出多少遍)
print('雪碧'*10) # 把"雪碧"輸出10遍
—— 雪碧雪碧雪碧雪碧雪碧雪碧雪碧雪碧雪碧雪碧
print('!'*15) # 把"!"輸出15遍
—— !!!!!!!!!!!!!!!
變量的輸入
input()內(nèi)置函數(shù),可以實(shí)現(xiàn)在控制臺(tái)中進(jìn)行輸入
所謂的函數(shù),我們可以理解為別人已寫好的代碼,而我們可以進(jìn)行調(diào)用,無需關(guān)系內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。
【實(shí)例2】超市買香蕉
banana_price = float(input("place input banana's price(¥):")) # 將從鍵盤輸入的數(shù)據(jù)轉(zhuǎn)換成浮點(diǎn)類型(小數(shù))
banana_weight = float(input("place input banana's weight(kg):")) # 將從鍵盤輸入的數(shù)據(jù)轉(zhuǎn)換成浮點(diǎn)類型(小數(shù))
amount = banana_price * banana_weight # 計(jì)算總金額
print('amount:', amount)
—— place input banana's price(¥):2.5
place input banana's weight(kg):5
amount: 12.5
內(nèi)存(未完整)
a = 1
a = 2
b = a # b和a同時(shí)指向2
a = 3 # a跑了,指向3
print(b) # 只剩b指向2
print(a) # a指向3
# —— 2
# —— 3
c = [1, 2, 3]
d = c
c.append(4)
print(d)
print(c)
格式化字符串(格式化輸出)
- 使用%格式化操作符進(jìn)行格式化輸出(明確輸入的數(shù)據(jù)類型)
# 1. 使用%格式化操作符進(jìn)行格式化輸出(易出錯(cuò))
# 格式:
# print('格式化字符串' % 變量)
# 例如:print('%s' % '雪碧')
# print('格式化字符串' % (變量1, 變量2, ...))
# 例如:print('%s,%d,%f,...' % ('雪碧', 3, 3.3, ...))
# %s 字符串
# %d 有符號(hào)的十進(jìn)制數(shù)
# %f 浮點(diǎn)數(shù)
# %% 輸出%本身
# 注意:%d的使用情況
student_number = 1
print('我的學(xué)號(hào)是%06d' % student_number)
# —— 我的學(xué)號(hào)是000001
print('我的學(xué)號(hào)是%6d' % student_number)
# —— 我的學(xué)號(hào)是 1
print('我的學(xué)號(hào)是%011d' % student_number)
# —— 我的學(xué)號(hào)是0000000001
print('我的學(xué)號(hào)是%11d' % student_number)
# —— 我的學(xué)號(hào)是 1
# 結(jié)論:%d要分情況討論,非零數(shù)前含有0時(shí),會(huì)在輸入的數(shù)字前補(bǔ)上n-1個(gè)零,否則會(huì)留n-1個(gè)空格。
# 注意:%f的使用情況
print('香蕉的單價(jià)為%000000000000.2f元/斤' % (00000.1))
—— 香蕉的單價(jià)為0.10元/斤
print('香蕉的單價(jià)為%.0000000000002f元/斤' % (0000.1))
—— 香蕉的單價(jià)為0.10元/斤
print('香蕉的單價(jià)為%.2f元/斤' % (0000.1))
—— 香蕉的單價(jià)為0.10元/斤
print('香蕉的單價(jià)為%.2f元/斤' % (1))
—— 香蕉的單價(jià)為1.00元/斤
print('香蕉的單價(jià)為%.1f元/斤' % (1))
—— 香蕉的單價(jià)為1.0元/斤
print('香蕉的單價(jià)為%.10f元/斤' % (1))
—— 香蕉的單價(jià)為1.0000000000元/斤
結(jié)論:%.f要分情況討論,當(dāng)為小數(shù)點(diǎn)前或小數(shù)點(diǎn)后非零數(shù)位置時(shí),對(duì)數(shù)本身沒有任何影響。
- 使用format()進(jìn)行格式化輸出(無需考慮數(shù)據(jù)類型)
# 2. 通過{}進(jìn)行格式化輸出,代替?zhèn)鹘y(tǒng)的%
# 格式:
# print('{}{}...{}'.format(a, b, ...))
# {}內(nèi)可以是任意的數(shù)字類型或非數(shù)字類型的數(shù)據(jù)
# 例:print('我叫{},今年{}歲了。'.format('雪碧', 20))
# ***拓展***
# --------------
# 格式:
# {模板字符串}.format(逗號(hào)分隔的參數(shù))
str1 = '{}曰:學(xué)而時(shí)習(xí)之,不亦說乎。'.format('孔子')
print(str1)
—— 孔子曰:學(xué)而時(shí)習(xí)之,不亦說乎。
# 模板字符串中含有多個(gè)槽時(shí)且沒有指定序號(hào),則會(huì)按照槽出現(xiàn)的順序分別對(duì)應(yīng)參數(shù)
str2 = '{}曰:學(xué)而時(shí)習(xí)之,不亦{}。'.format('孔子', '說乎')
print(str2)
—— 孔子曰:學(xué)而時(shí)習(xí)之,不亦說乎。
# 可以通過format()參數(shù)的序號(hào)在模板字符串槽中指定參數(shù)的使用,參數(shù)從0開始編號(hào)(類似于索引)
str2 = '{1}曰:學(xué)而時(shí)習(xí)之,不亦{0}。'.format('說乎', '孔子')
print(str2)
—— 孔子曰:學(xué)而時(shí)習(xí)之,不亦說乎。
【練習(xí)2】輸出“公孫離的等級(jí)為:15”這句話
name = '公孫離'
grade = 15
# 拼接字符串形式輸出:
print(name+'的等級(jí)為:'+str(grade))
—— 公孫離的等級(jí)為:15
# 使用%進(jìn)行字符串的格式化輸出
print('%s的等級(jí)為:%d' % (name, grade))
—— 公孫離的等級(jí)為:15
# 使用format()進(jìn)行字符串的格式化輸出
print('{}的等級(jí)為:{}'.format(name, grade))
—— 公孫離的等級(jí)為:15
# 結(jié)論:
# 1. 輸出結(jié)果一樣,哪種方便用哪種,當(dāng)輸出的數(shù)比較多且復(fù)雜時(shí)會(huì)使用后面兩種。
# 2. 第一種方式比較粗暴且不好用(要把非字符串的統(tǒng)統(tǒng)進(jìn)行強(qiáng)制類型轉(zhuǎn)化為字符串類型),
# 第二種方式要區(qū)分好數(shù)據(jù)類型,
# 第三種方式的優(yōu)點(diǎn)在于無需區(qū)分?jǐn)?shù)據(jù)類型,直接調(diào)用輸出即可
# 3. 推薦使用第三種方式(最常用且最不易出錯(cuò))
# 4. 以后會(huì)介紹更加便捷的方法,請(qǐng)期待 ~
【練習(xí)3】課后習(xí)題1
# 定義字符串變量name,輸出我的名字叫小明,請(qǐng)多多關(guān)照!
# 定義整數(shù)變量student_no,輸出我的學(xué)號(hào)是000001
# 定義小數(shù)price、weight、money,輸出蘋果單價(jià)9.00元/斤,購(gòu)買了5.00斤,需要支付45.00元
# 定義一個(gè)小數(shù)scale,輸出數(shù)據(jù)比例是10.00 %
name = '小明'
print('我的名字叫%s請(qǐng)多關(guān)照!' % name)
student_no = 1
print('我的學(xué)號(hào)是%06d' % student_no)
price = 9.00
weight = 5.00
money = price * weight
print('蘋果單價(jià)%.2f元/斤,購(gòu)買了%.2f斤,需要支付%.2f元' % (price, weight, money))
scale = 10.00
print('數(shù)據(jù)比例是%.2f%%' % scale)
—— 我的名字叫小明請(qǐng)多關(guān)照!
我的學(xué)號(hào)是000001
蘋果單價(jià)9.00元/斤,購(gòu)買了5.00斤,需要支付45.00元
數(shù)據(jù)比例是10.00%
【練習(xí)4】課后習(xí)題2-1——個(gè)人名片(使用%格式操作符)
"""在控制臺(tái)一次提示用戶輸入:姓名、公司、職位、電話、電子郵箱"""
name = input('請(qǐng)輸入名字:')
company = input('請(qǐng)輸入公司:')
title = input('請(qǐng)輸入職位:')
phone = input('請(qǐng)輸入電話:')
email = input('請(qǐng)輸入郵箱:')
print('*' * 50)
print(company)
print()
print('%s(%s)' % (name, title))
print()
print('電話:%s' % phone)
print('郵箱:%s' % email)
print('*' * 50)
【練習(xí)5】課后習(xí)題2-2——個(gè)人名片(使用format())
"""在控制臺(tái)一次提示用戶輸入:姓名、公司、職位、電話、電子郵箱"""
name = input('請(qǐng)輸入名字:')
company = input('請(qǐng)輸入公司:')
title = input('請(qǐng)輸入職位:')
phone = input('請(qǐng)輸入電話:')
email = input('請(qǐng)輸入郵箱:')
print('*' * 50)
print(company)
print()
print('{}({})'.format(name, title))
print()
print('電話:{}'.format(phone))
print('郵箱:{}'.format(email))
print('*' * 50)
效果如下(練習(xí)4和練習(xí)5):
請(qǐng)輸入名字:雪碧
請(qǐng)輸入公司:巨大動(dòng)力
請(qǐng)輸入職位:CEO
請(qǐng)輸入電話:7533
請(qǐng)輸入郵箱:2398344557@qq.com
**************************************************
巨大動(dòng)力
雪碧(CEO)
電話:7533
郵箱:2398344557@qq.com
**************************************************
變量的命名
--- 標(biāo)識(shí)符
- 是程序員自己命名的變量名
- 原則上,標(biāo)識(shí)符的命名要有”見名知意”的效果,盡量不要隨意起名
# bad命名:
c = '東軟'
en = '9527'
# good命名:
company = 'neusoft'
employNumber = '9527'
- 標(biāo)識(shí)符可以由字母、下劃線、數(shù)字組成
- 不能以數(shù)字開頭
- 不能與保留字(關(guān)鍵字)重復(fù)
--- 保留字(關(guān)鍵字)
- 關(guān)鍵字就是Python中內(nèi)部已經(jīng)定義好的標(biāo)識(shí)符
- 具有特殊的功能和含義
- 不允許定義和關(guān)鍵字相同的標(biāo)識(shí)符
- 保留字(關(guān)鍵字)如下:
# 查看方式
import keword
print(keyword.kwlist)
# 輸出如下:
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
- 變量的命名規(guī)則
目的:規(guī)范的命名是為了增強(qiáng)代碼的可讀性,其他人及自己對(duì)代碼的識(shí)別
注意:Python中的標(biāo)識(shí)符是嚴(yán)格區(qū)分大小寫的
【錯(cuò)誤示范】
userName = 'xuebi'
print(username)
—— NameError: name 'username' is not defined
# 1. 下劃線命名法:
# 原則:每個(gè)單詞都要小寫,單詞直接使用_鏈接
first_name = 'joe'
qq_number = '888888'
# 2. 駝峰式命名法:
# 小駝峰:第一個(gè)單詞從小寫字母開始,后續(xù)單詞首字母大寫
firstName = 'Robbt'
# 大駝峰:每個(gè)單詞首字母都才去大寫的方式
FirstName = 'Juliet'