基礎(chǔ)運算和流程控制
1挟炬、注釋
當(dāng)行注釋:# 被注釋內(nèi)容
多行注釋:'''被注釋內(nèi)容'''鸥滨,或者"""被注釋內(nèi)容"""
2嗦哆、變量
變量是什么? 變量:把程序運行的中間結(jié)果臨時的存在內(nèi)存里婿滓,以便后續(xù)的代碼調(diào)用老速。
2.1、聲明變量
name = "taibai"
上述代碼聲明了一個變量凸主,變量名為: name橘券,變量name的值為:"taibai"
變量的作用:昵稱,其代指內(nèi)存里某個地址中保存的內(nèi)容
2.2卿吐、變量定義的規(guī)則:
? 變量名只能是 字母旁舰、數(shù)字或下劃線的任意組合
? 變量名的第一個字符不能是數(shù)字
? 以下關(guān)鍵字不能聲明為變量名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
? 變量的定義要具有可描述性。
2.3嗡官、推薦定義方式
駝峰體
AgeOfOldboy = 56
NumberOfStudents = 80
下劃線
age_of_oldboy = 56
number_of_students = 80
你覺得哪種更清晰箭窜,哪種就是官方推薦的,我想你肯定會先第2種,第一種AgeOfOldboy咋一看以為是AngelaBaby
2.4衍腥、變量的賦值
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name1 = "wupeiqi"
name2 = "alex"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name1 = "taibai"
name2 = name1
2.5磺樱、定義變量不好的方式舉例
? 變量名為中文、拼音
? 變量名過長
? 變量名詞不達意
3婆咸、常量
常量即指不變的量竹捉,如pai 3.141592653..., 或在程序運行過程中不會改變的量
舉例,假如老男孩老師的年齡會變尚骄,那這就是個變量块差,但在一些情況下,他的年齡不會變了倔丈,那就是常量憨闰。在Python中沒有一個專門的語法代表常量,程序員約定俗成用變量名全部大寫代表常量
AGE_OF_OLDBOY = 56
在c語言中有專門的常量定義語法乃沙,const int count = 60;一旦定義為常量起趾,更改即會報錯
4、程序交互
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 將用戶輸入的內(nèi)容賦值給 name 變量
name = input("請輸入用戶名:")
# 打印輸入的內(nèi)容
print(name)
執(zhí)行腳本就會發(fā)現(xiàn)警儒,程序會等待你輸入姓名后再往下繼續(xù)走训裆。
可以讓用戶輸入多個信息,如下
#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = input("What is your name?")
age = input("How old are you?")
hometown = input("Where is your hometown?")
print("Hello ",name , "your are ", age , "years old, you came from",hometown)
5蜀铲、基礎(chǔ)數(shù)據(jù)類型(初始)
什么是數(shù)據(jù)類型边琉?
我們?nèi)祟惪梢院苋菀椎姆智鍞?shù)字與字符的區(qū)別,但是計算機并不能呀记劝,計算機雖然很強大变姨,但從某種角度上看又很傻,除非你明確的告訴它厌丑,1是數(shù)字定欧,“漢”是文字渔呵,否則它是分不清1和‘漢’的區(qū)別的,因此砍鸠,在每個編程語言里都會有一個叫數(shù)據(jù)類型的東東扩氢,其實就是對常用的各種數(shù)據(jù)類型進行了明確的劃分,你想讓計算機進行數(shù)值運算爷辱,你就傳數(shù)字給它录豺,你想讓他處理文字,就傳字符串類型給他饭弓。Python中常用的數(shù)據(jù)類型有多種双饥,今天我們暫只講3種, 數(shù)字弟断、字符串咏花、布爾類型
5.1、整數(shù)類型(int)阀趴。
int(整型)
在32位機器上迟螺,整數(shù)的位數(shù)為32位,取值范圍為-231~231-1舍咖,即-2147483648~2147483647
在64位系統(tǒng)上,整數(shù)的位數(shù)為64位锉桑,取值范圍為-263~263-1排霉,即-9223372036854775808~9223372036854775807
long(長整型)
跟C語言不同,Python的長整數(shù)沒有指定位寬民轴,即:Python沒有限制長整數(shù)數(shù)值的大小攻柠,但實際上由于機器內(nèi)存有限,我們使用的長整數(shù)數(shù)值不可能無限大后裸。
注意瑰钮,自從Python2.2起,如果整數(shù)發(fā)生溢出微驶,Python會自動將整數(shù)數(shù)據(jù)轉(zhuǎn)換為長整數(shù)浪谴,所以如今在長整數(shù)數(shù)據(jù)后面不加字母L也不會導(dǎo)致嚴(yán)重后果了。
注意:在Python3里不再有l(wèi)ong類型了因苹,全都是int
>>> a= 2**64
>>> type(a) #type()是查看數(shù)據(jù)類型的方法
<type 'long'>
>>> b = 2**60
>>> type(b)
<type 'int'>
除了int和long之外苟耻, 其實還有float浮點型, 復(fù)數(shù)型,但今天先不講啦
5.2扶檐、字符串類型(str)凶杖。
在Python中,加了引號的字符都被認(rèn)為是字符串!
>>> name = "Alex Li" #雙引號
>>> age = "22" #只要加引號就是字符串
>>> age2 = 22 #int
>>>
>>> msg = '''My name is Alex, I am 22 years old!''' #我擦款筑,3個引號也可以
>>>
>>> hometown = 'ShanDong' #單引號也可以
那單引號智蝠、雙引號腾么、多引號有什么區(qū)別呢? 讓我大聲告訴你杈湾,單雙引號木有任何區(qū)別解虱,只有下面這種情況 你需要考慮單雙的配合
msg = "My name is Alex , I'm 22 years old!"
多引號什么作用呢?作用就是多行字符串必須用多引號
msg = '''
今天我想寫首小詩毛秘,
歌頌我的同桌饭寺,
你看他那烏黑的短發(fā),
好像一只炸毛雞叫挟。
'''
print(msg)
字符串拼接
數(shù)字可以進行加減乘除等運算艰匙,字符串呢?讓我大聲告訴你抹恳,也能员凝?what ?是的,但只能進行"相加"和"相乘"運算奋献。
>>> name
'Alex Li'
>>> age
'22'
>>>
>>> name + age #相加其實就是簡單拼接
'Alex Li22'
>>>
>>> name * 10 #相乘其實就是復(fù)制自己多少次健霹,再拼接在一起
'Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li'
注意,字符串的拼接只能是雙方都是字符串瓶蚂,不能跟數(shù)字或其它類型拼接
>>> type(name),type(age2)
(<type 'str'>, <type 'int'>)
>>>
>>> name
'Alex Li'
>>> age2
22
>>> name + age2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects #錯誤提示數(shù)字 和 字符 不能拼接
8.3糖埋、布爾值(True,F(xiàn)alse)窃这。
布爾類型很簡單瞳别,就兩個值 ,一個True(真)杭攻,一個False(假), 主要用記邏輯判斷
但其實你們并不明白對么祟敛? let me explain, 我現(xiàn)在有2個值 , a=3, b=5 , 我說a>b你說成立么? 我們當(dāng)然知道不成立兆解,但問題是計算機怎么去描述這成不成立呢馆铁?或者說a< b是成立,計算機怎么描述這是成立呢锅睛?
沒錯埠巨,答案就是,用布爾類型
>>> a=3
>>> b=5
>>>
>>> a > b #不成立就是False,即假
False
>>>
>>> a < b #成立就是True, 即真
True
6现拒、格式化輸出乖订。
現(xiàn)有一練習(xí)需求,問用戶的姓名具练、年齡乍构、工作、愛好 霸株,然后打印成以下格式
------------ info of Alex Li -----------
Name : Alex Li
Age : 22
job : Teacher
Hobbie: girl
------------- end -----------------
你怎么實現(xiàn)呢碗旅?你會發(fā)現(xiàn),用字符拼接的方式還難實現(xiàn)這種格式的輸出销部,所以一起來學(xué)一下新姿勢
只需要把要打印的格式先準(zhǔn)備好眠饮, 由于里面的 一些信息是需要用戶輸入的奥帘,你沒辦法預(yù)設(shè)知道,因此可以先放置個占位符仪召,再把字符串里的占位符與外部的變量做個映射關(guān)系就好啦
name = input("Name:")
age = input("Age:")
job = input("Job:")
hobbie = input("Hobbie:")
info = '''
------------ info of %s ----------- #這里的每個%s就是一個占位符寨蹋,本行的代表 后面拓號里的 name
Name : %s #代表 name
Age : %s #代表 age
job : %s #代表 job
Hobbie: %s #代表 hobbie
------------- end -----------------
''' %(name,name,age,job,hobbie) # 這行的 % 號就是 把前面的字符串 與拓號 后面的 變量 關(guān)聯(lián)起來
print(info)
%s就是代表字符串占位符,除此之外扔茅,還有%d,是數(shù)字占位符已旧, 如果把上面的age后面的換成%d,就代表你必須只能輸入數(shù)字啦
age : %d
我們運行一下召娜,但是發(fā)現(xiàn)出錯了运褪。。玖瘸。
說%d需要一個數(shù)字秸讹,而不是str, what? 我們明明輸入的是數(shù)字呀,22雅倒,22呀璃诀。
不用擔(dān)心 ,不要相信你的眼睛我們調(diào)試一下蔑匣,看看輸入的到底是不是數(shù)字呢文虏?怎么看呢?查看數(shù)據(jù)類型的方法是什么來著殖演?type()
name = input("Name:")
age = input("Age:")
print(type(age))
執(zhí)行輸出是
Name:Alex
Age:22
<class 'str'> #怎么會是str
Job:IT
讓我大聲告訴你,input接收的所有輸入默認(rèn)都是字符串格式年鸳!
要想程序不出錯趴久,那怎么辦呢?簡單搔确,你可以把str轉(zhuǎn)成int
age = int( input("Age:") )
print(type(age))
肯定沒問題了彼棍。相反,能不能把字符串轉(zhuǎn)成數(shù)字呢膳算?必然可以座硕,str( yourStr )
問題:現(xiàn)在有這么行代碼
msg = "我是%s,年齡%d,目前學(xué)習(xí)進度為80%"%('金鑫',18)
print(msg)
這樣會報錯的,因為在格式化輸出里涕蜂,你出現(xiàn)%默認(rèn)為就是占位符的%华匾,但是我想在上面一條語句中最后的80%就是表示80%而不是占位符,怎么辦机隙?
msg = "我是%s,年齡%d,目前學(xué)習(xí)進度為80%%"%('金鑫',18)
print(msg)
這樣就可以了蜘拉,第一個%是對第二個%的轉(zhuǎn)譯萨西,告訴Python解釋器這只是一個單純的%,而不是占位符旭旭。
7谎脯、基本運算符
運算符
計算機可以進行的運算有很多種,可不只加減乘除這么簡單持寄,運算按種類可分為算數(shù)運算源梭、比較運算、邏輯運算稍味、賦值運算废麻、成員運算、身份運算仲闽、位運算脑溢,今天我們暫只學(xué)習(xí)算數(shù)運算、比較運算赖欣、邏輯運算屑彻、賦值運算
算數(shù)運算
以下假設(shè)變量:a=10,b=20
比較運算
以下假設(shè)變量:a=10顶吮,b=20
賦值運算
以下假設(shè)變量:a=10社牲,b=20
邏輯運算
針對邏輯運算的進一步研究:
1,在沒有()的情況下not 優(yōu)先級高于 and,and優(yōu)先級高于or悴了,即優(yōu)先級關(guān)系為( )>not>and>or搏恤,同一優(yōu)先級從左往右計算。
例題:
判斷下列邏輯語句的True湃交,F(xiàn)alse熟空。
1,3>4 or 4<3 and 1==1
2,1 < 2 and 3 < 4 or 1>2
3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1
4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8
5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
6,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
2 , x or y , x為真,值就是x搞莺,x為假息罗,值是y;
x and y, x為真才沧,值是y,x為假迈喉,值是x。
例題:求出下列邏輯語句的值温圆。
8 or 4
0 and 3
0 or 4 and 3 or 7 or 9 and 6
in,not in :
判斷子元素是否在原字符串(字典挨摸,列表,集合)中:
例如:
#print('喜歡' in 'dkfljadklf喜歡hfjdkas')
#print('a' in 'bcvd')
#print('y' not in 'ofkjdslaf')
8岁歉、流程控制之--if
假如把寫程序比做走路得运,那我們到現(xiàn)在為止,一直走的都是直路,還沒遇到過分叉口澈圈,想象現(xiàn)實中彬檀,你遇到了分叉口,然后你決定往哪拐必然是有所動機的瞬女。你要判斷那條岔路是你真正要走的路窍帝,如果我們想讓程序也能處理這樣的判斷怎么辦? 很簡單诽偷,只需要在程序里預(yù)設(shè)一些條件判斷語句坤学,滿足哪個條件,就走哪條岔路报慕。這個過程就叫流程控制深浮。
if...else 語句
單分支
if 條件:
滿足條件后要執(zhí)行的代碼
雙分支
"""
if 條件:
滿足條件執(zhí)行代碼
else:
if條件不滿足就走這段
"""
AgeOfOldboy = 48
if AgeOfOldboy > 50 :
print("Too old, time to retire..")
else:
print("還能折騰幾年!")
縮進
這里必須要插入這個縮進的知識點
你會發(fā)現(xiàn),上面的if代碼里眠冈,每個條件的下一行都縮進了4個空格飞苇,這是為什么呢?這就是Python的一大特色蜗顽,強制縮進布卡,目的是為了讓程序知道,每段代碼依賴哪個條件雇盖,如果不通過縮進來區(qū)分忿等,程序怎么會知道,當(dāng)你的條件成立后崔挖,去執(zhí)行哪些代碼呢贸街?
在其它的語言里,大多通過{}來確定代碼塊狸相,比如C,C++,Java,Javascript都是這樣薛匪,看一個JavaScript代碼的例子
var age = 56
if ( age < 50){
console.log("還能折騰")
console.log('可以執(zhí)行多行代碼')
}else{
console.log('太老了')
}
在有{}來區(qū)分代碼塊的情況下,縮進的作用就只剩下讓代碼變的整潔了脓鹃。
Python是門超級簡潔的語言逸尖,發(fā)明者定是覺得用{}太丑了,所以索性直接不用它将谊,那怎么能區(qū)分代碼塊呢?答案就是強制縮進渐白。
Python的縮進有以下幾個原則:
? 頂級代碼必須頂行寫尊浓,即如果一行代碼本身不依賴于任何條件纯衍,那它必須不能進行任何縮進
? 同一級別的代碼瓦堵,縮進必須一致
? 官方建議縮進用4個空格,當(dāng)然你也可以用2個杂穷,如果你想被人笑話的話。
多分支
回到流程控制上來廊蜒,if...else ...可以有多個分支條件
if 條件:
滿足條件執(zhí)行代碼
elif 條件:
上面的條件不滿足就走這個
elif 條件:
上面的條件不滿足就走這個
elif 條件:
上面的條件不滿足就走這個
else:
上面所有的條件不滿足就走這段
寫個猜年齡的游戲吧
age_of_oldboy = 48
guess = int(input(">>:"))
if guess > age_of_oldboy :
print("猜的太大了樟凄,往小里試試...")
elif guess < age_of_oldboy :
print("猜的太小了汰现,往大里試試...")
else:
print("恭喜你,猜對了...")
上面的例子,根據(jù)你輸入的值不同驮捍,會最多得到3種不同的結(jié)果
再來個匹配成績的小程序吧本讥,成績有ABCDE5個等級色查,與分?jǐn)?shù)的對應(yīng)關(guān)系如下
A 90-100
B 80-89
C 60-79
D 40-59
E 0-39
要求用戶輸入0-100的數(shù)字后跨扮,你能正確打印他的對應(yīng)成績
score = int(input("輸入分?jǐn)?shù):"))
if score > 100:
print("我擦,最高分才100...")
elif score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 60:
print("C")
elif score >= 40:
print("D")
else:
print("太笨了...E")
這里有個問題,就是當(dāng)我輸入95的時候 拔莱,它打印的結(jié)果是A,但是95 明明也大于第二個條件elif score >=80:呀, 為什么不打印B呢?這是因為代碼是從上到下依次判斷,只要滿足一個须误,就不會再往下走啦,這一點一定要清楚呀!
9方淤、流程控制之--while循環(huán)
9.1,基本循環(huán)
while 條件:
# 循環(huán)體
# 如果條件為真,那么循環(huán)體則執(zhí)行
# 如果條件為假,那么循環(huán)體不執(zhí)行
9.2、循環(huán)中止語句
如果在循環(huán)的過程中,因為某些原因策严,你不想繼續(xù)循環(huán)了,怎么把它中止掉呢倔韭?這就用到break 或 continue 語句
? break用于完全結(jié)束一個循環(huán)术浪,跳出循環(huán)體執(zhí)行循環(huán)后面的語句
? continue和break有點類似,區(qū)別在于continue只是終止本次循環(huán)寿酌,接著還執(zhí)行后面的循環(huán)胰苏,break則完全終止循環(huán)
例子:break
count = 0
while count <= 100 : #只要count<=100就不斷執(zhí)行下面的代碼
print("loop ", count)
if count == 5:
break
count +=1 #每執(zhí)行一次,就把count+1醇疼,要不然就變成死循環(huán)啦硕并,因為count一直是0
print("-----out of while loop ------")
輸出
loop 0
loop 1
loop 2
loop 3
loop 4
loop 5
-----out of while loop ------
例子:continue
count = 0
while count <= 100 :
count += 1
if count > 5 and count < 95: #只要count在6-94之間,就不走下面的print語句僵腺,直接進入下一次loop
continue
print("loop ", count)
print("-----out of while loop ------")
輸出
loop 1
loop 2
loop 3
loop 4
loop 5
loop 95
loop 96
loop 97
loop 98
loop 99
loop 100
loop 101
-----out of while loop ------
9.3鲤孵、while ... else ..
與其它語言else 一般只與if 搭配不同,在Python 中還有個while ...else 語句
while 后面的else 作用是指辰如,當(dāng)while 循環(huán)正常執(zhí)行完普监,中間沒有被break 中止的話,就會執(zhí)行else后面的語句
count = 0
while count <= 5 :
count += 1
print("Loop",count)
else:
print("循環(huán)正常執(zhí)行完啦")
print("-----out of while loop ------")
輸出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循環(huán)正常執(zhí)行完啦
-----out of while loop ------
如果執(zhí)行過程中被break啦琉兜,就不會執(zhí)行else的語句啦
count = 0
while count <= 5 :
count += 1
if count == 3:break
print("Loop",count)
else:
print("循環(huán)正常執(zhí)行完啦")
print("-----out of while loop ------")
輸出
Loop 1
Loop 2
-----out of while loop ------
10凯正、相關(guān)練習(xí)題
1、使用while循環(huán)輸入 1 2 3 4 5 6 8 9 10
2豌蟋、求1-100的所有數(shù)的和
3廊散、輸出 1-100 內(nèi)的所有奇數(shù)
4、輸出 1-100 內(nèi)的所有偶數(shù)
5梧疲、求1-2+3-4+5 ... 99的所有數(shù)的和
sum = 0
for i in range(1,101):
if i % 2 :
sum -= i
else:
sum += i
print(i,sum)
print(sum)
6允睹、用戶登陸(三次機會重試)
login = 'xiaoming'
password = 123
i = 0
while i <3 :
i += 1
print('請輸入賬號')
lg = input()
print('請輸入密碼')
pw = int(input().strip()) #.strip() 去空格
if login == lg and password == pw :
print('登陸成功')
break
print('重新登陸')