(內(nèi)容包括Python語法概述,流程控制氓鄙,條件表達(dá)式)
1 Python語法
1.1 Python的特點(diǎn)
Python是一種完全面向?qū)ο蟮摹⒔忉屝缘囊瞪帷⒖梢浦驳亩独埂㈤_源的腳本編程高級語言升酣,具有豐富的庫,允許邊寫邊執(zhí)行态罪。他完全支持繼承噩茄、重載,強(qiáng)大的第三方模塊涵蓋科學(xué)計算向臀、人工智能巢墅、機(jī)器學(xué)習(xí)、Web開發(fā)券膀、數(shù)據(jù)庫接口君纫、圖形系統(tǒng)等多個領(lǐng)域。有Web開發(fā)芹彬、爬蟲開發(fā)蓄髓、運(yùn)維開發(fā)、數(shù)據(jù)挖掘舒帮、人工智能等多個方向会喝。
1.2 基本語法規(guī)則
雖然Python語法簡單,但也有如下基本規(guī)則:
- ①從頭到尾玩郊,逐個語句執(zhí)行
- ②注釋#肢执、空白行、文檔字符串(三引號)會直接被忽略
- ③自動檢測語句邊界译红,語句邊界由書寫者的語句縮進(jìn)形成(同一級別的語句的縮進(jìn)必須相同)
- ④復(fù)合語句(子句预茄,clause):由首句、冒號侦厚、下一行開始相同縮進(jìn)的代碼塊組成
- ⑤通常一句一行耻陕,也允許但不建議一行多句或一句多行。
??一句多行: 續(xù)行符\可以續(xù)行接著寫刨沦,小中大括號中的內(nèi)容可以直接換行寫诗宣;
??一行多句:分號隔開,或直接在冒號后面寫想诅。
1.3 幾種常見語句
2 流程控制語句
一項任務(wù)可以被變成一個流程召庞,而描述這個流程就可以用自然語言、流程圖侧蘸、偽代碼裁眯、程序代碼等多種形式表示,自然語言是最簡單的,流程圖是最直觀的凫海,程序代碼是唯一可以被計算機(jī)識別運(yùn)行的化焕。
2.1 流程圖
2.1 分支語句if
上圖是完整的if分支語句:
【書寫時:在if后加一個邏輯運(yùn)算式①,冒號結(jié)尾嚼沿,下一行縮進(jìn)蒸绩,代碼塊①中書寫此邏輯運(yùn)算式①成立后要完成的語句塊①祭钉;之后寫在上以邏輯運(yùn)算不成立的前提下骤菠,另一個邏輯運(yùn)算式②它改,冒號結(jié)尾下一行縮進(jìn),代碼塊②中書寫此邏輯運(yùn)算式②成立后要完成的語句塊②商乎,以此類推央拖。最后寫else:,是上面n-1個clause都不滿足時鹉戚,執(zhí)行的語句塊n鲜戒。】即抹凳,列出每種情況遏餐,和滿足情況下要做的事。
【執(zhí)行時:先判斷邏輯運(yùn)算式①赢底,滿足就執(zhí)行語句塊①并結(jié)束判斷失都,不滿足就判斷邏輯運(yùn)算式②,②滿足就執(zhí)行語句塊②并結(jié)束判斷幸冻,以此類推粹庞,如果都不滿足,就執(zhí)行else后的語句塊n洽损,并結(jié)束】即庞溜,從上到下執(zhí)行,一旦滿足某個結(jié)果趁啸,直接運(yùn)行此語句塊并結(jié)束判斷强缘。
一些說明:
1.Python中沒有switch-case語句;
2.邏輯運(yùn)算式可以用邏輯運(yùn)算符連接不傅,可以選擇加或不加小括號旅掂;
3.條件和語句塊用縮進(jìn)來體現(xiàn),所有語句塊間的縮進(jìn)距離應(yīng)一致访娶;中止一行就是中止一個語句(無需額外分號)商虐;中止縮進(jìn)就是中止一個代碼塊(代碼塊無需大括號包裹);
4.if后可以沒有else或者elif(關(guān)鍵字elif就是else if的簡寫)崖疤。如果有else秘车,就一定會執(zhí)行某一分支的語句塊;
5.所有分支中劫哼,最多執(zhí)行一個分支的語句塊叮趴,執(zhí)行后,結(jié)束整個判斷权烧。
關(guān)于else懸掛:
如果前面有好多個if嵌套在一起(雖然可以去避免嵌套眯亦,做成elif)伤溉,怎么知道else屬于哪個if呢? 很好辦妻率!你只需要看else的開頭和一個if對齊乱顾,它就是哪個if的else。
關(guān)于if的例子:
#解一元二次方程的根
s = input("請依次輸入二次項宫静、一次項走净、常數(shù)項,用空格分隔:\n>>>")
a,b,c = [eval(k) for k in s.split(" ")]
delta = b*b-4*a*c
if delta==0 :
x1 = x2 = -0.5*b/a
elif delta>0 :
x1 = -0.5*b/a + 0.5*delta**0.5/a
x2 = -0.5*b/a - 0.5*delta**0.5/a
else :
x1 = complex(-0.5*b/a,0.5*(-delta)**0.5/a)
x2 = x1.conjugate()
print(f"一元二次方程的兩個解:\nx1 = {x1}\nx2 = {x2}")
2.2 交互循環(huán)while
和if判斷一樣孤里,while也會對邏輯表達(dá)式做判斷伏伯,如果判斷結(jié)果為真,就會進(jìn)入循環(huán)扭粱,直到邏輯表達(dá)式不在成立舵鳞,(或被中斷)。
也就是說琢蛤,【只要滿足條件蜓堕,就在循環(huán)體Loop中不斷執(zhí)行循環(huán)體語句塊,除非有break博其、continue命令或者不再滿足條件才會跳出】
#按位取出數(shù)字的值
num = eval(input("請輸入數(shù)字:\n>>>"))
a = []
i = 0
flag = False
if num < 0:
num = -num
flag = True
while num - (10**(i)) >= 0 :
print((10**(i)))
a.append(int(num//10**i%10))
i += 1
#注意:循環(huán)前要把循環(huán)變量初始一下套才,循環(huán)體中要使循環(huán)變量離結(jié)束的條件更近
if flag :
a.append("-")
elif a == [] :
a = [0]
print(a)
2.3 序列迭代for
相比與while循環(huán),由于有range函數(shù)慕淡,for循環(huán)的使用更加便捷背伴。
把變量在某迭代器中遍歷一遍,遍歷每個元素時都執(zhí)行循環(huán)體語句塊峰髓。
#斐波那契數(shù)列前n項輸出
num2,num1 = 0,1
for i in range(15): #循環(huán)變量只用作計數(shù)
num1,num2 = num1+num2,num1
print(num1,end="\t")
#n以內(nèi)的素數(shù)
print(2,end = "\t")
for i in range(3,500,2): #循環(huán)用作循環(huán)體語句塊的變量
flag = True
for j in range(2,int(pow(i,0.5)+1)):
if i%j == 0 :
flag = False
break
if flag :
print(i,end = "\t")
幾點(diǎn)注意:
- for和while的區(qū)別: for在循環(huán)次數(shù)固定且可以直接表示時使用傻寂,while在終止條件明確且次數(shù)尚不確定時使用
- for和while循環(huán)體語句中,不能定義新變量携兵,只能把原有變量重新賦值疾掰,所以定義中間變量需要在循環(huán)體外
- for循環(huán)的循環(huán)變量i的值,從迭代器中逐個收到徐紧,循環(huán)體中賦值只在本次循環(huán)中生效静檬,甚至直接del i也不會報錯
- 減少循環(huán)次數(shù)可以提高運(yùn)行效率(如除了2以外的素數(shù)都是奇數(shù),將偶數(shù)參與循環(huán)判斷素數(shù)就是浪費(fèi)并级;再比如高中學(xué)的數(shù)列求和直接用拂檩,1到100的和就不要循環(huán)了。)
#復(fù)利:周定投計算
annual_rate = eval(input("請輸入平均年化利率:"))
if annual_rate>=1 :
annual_rate /= 100
weekly_rate = (1+annual_rate)**(1/52)-1
week_capital = float(input("請輸入周定投金額:"))
total_capital= amount = 0.0
stop_profit = int(input("請選擇止盈條件:1.按年止盈\t2.按獲利比率止盈\t3.按總金額止盈\n>>>"))
if stop_profit == 1 :
for i in range(1,25*52+1):
total_capital += week_capital
amount = amount*(1+weekly_rate) + week_capital
if (i%52 == 0) : print(f"第{i//52:2d}年嘲碧,本金{total_capital:>9.2f}稻励,賬戶總額{round(amount,2):>9.2f},盈利比{(amount-total_capital)/total_capital:.2%}愈涩。")
elif stop_profit == 2 :
stop_rate = eval(input("請輸入想要的獲利比率:"))
i = 0
if stop_rate>1 :
stop_rate /= 100
while ((amount-total_capital)/(total_capital+0.1) < stop_rate):
i += 1
total_capital += week_capital
amount = amount*(1+weekly_rate) + week_capital
else :
print(f"第{i//52:2d}年第{i%52:2d}周钉迷,盈利比{(amount-total_capital)/total_capital:.2%}至非,本金{total_capital:>9.2f}钠署,賬戶總額{round(amount,2):>9.2f}糠聪。")
elif stop_profit == 3 :
would_amount = eval(input("請輸入想要的總金額:"))
i = 0
while (amount <= would_amount):
i += 1
total_capital += week_capital
amount = amount*(1+weekly_rate) + week_capital
else :
print(f"第{i//52:2d}年第{i%52:2d}周,總額達(dá)到{round(amount,2):>9.2f}谐鼎,盈利比{(amount-total_capital)/total_capital:.2%}舰蟆,本金{total_capital:>9.2f}。")
2.4.1 for循環(huán)下標(biāo)提取
在for循環(huán)對字符串狸棍、列表或元組進(jìn)行遍歷的時候身害,我們往往用for i in list對列表中的元素進(jìn)行讀取,如果我們在讀取元素的時候同時想要得到其下標(biāo)草戈,可以創(chuàng)建一個循環(huán)次數(shù)計數(shù)變量x=0塌鸯,并且在每次循環(huán)之后自加來達(dá)到效果。另一種快捷的方法就是使用內(nèi)置函數(shù)enumerate(iter)來實(shí)現(xiàn)這種功能唐片。
如: for i,name in enumerate(representativesList): 這樣的話丙猬,i就是這個元素的下標(biāo),name就是此下表對應(yīng)的元素的內(nèi)容费韭。
2.4 break和continue
break和continue是打斷原有循環(huán)體的一種方式茧球,不同的是,continue直接跳入下一次循環(huán)星持,break跳出這一循環(huán)體(但不會跳出更高層的循環(huán))抢埋。也就是說:
continue直接進(jìn)入下一次循環(huán),
break直接跳出本循環(huán)體督暂。
另外揪垄,python中沒有g(shù)oto,雖然可以用第三方庫做出goto的效果逻翁,但是if加goto效果和while是一模一樣的饥努。
2.5 三種條件表達(dá)式
和C語言的三目運(yùn)算符(CONDITION?A:B)一樣,Python也有自己的條件運(yùn)算符卢未,又根據(jù)列表中數(shù)據(jù)無類型相同的限制和邏輯運(yùn)算符有邏輯短路一說肪凛,總結(jié)了三種條件表達(dá)式:
解釋如下:
法①:這個方法就類似C語言的 (? :)運(yùn)算符,是一個簡易的判斷辽社,在A if CONDITION else B中伟墙,如果condition成立,則執(zhí)行A滴铅,不然執(zhí)行B戳葵。
法②:這個方法利用列表可以存下不同類型的數(shù)據(jù),因?yàn)橹罢f過汉匙,F(xiàn)alse就是0拱烁,True是1生蚁,可以參加運(yùn)算。所以condition的情況就代表了列表的第0和第1個元素戏自。
法③:利用的是邏輯短路邦投。
Extra1.1 (番外篇) 常見數(shù)列求和公式
如果您覺得Tc寫得不錯或者不好,歡迎批評?或點(diǎn)贊??擅笔。