Elements of Python_03

(內(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

循環(huán)的流程圖

和if判斷一樣孤里,while也會對邏輯表達(dá)式做判斷伏伯,如果判斷結(jié)果為真,就會進(jìn)入循環(huán)扭粱,直到邏輯表達(dá)式不在成立舵鳞,(或被中斷)。

while的句式:

也就是說琢蛤,【只要滿足條件蜓堕,就在循環(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)注意:

  1. for和while的區(qū)別: for在循環(huán)次數(shù)固定且可以直接表示時使用傻寂,while在終止條件明確且次數(shù)尚不確定時使用
  2. for和while循環(huán)體語句中,不能定義新變量携兵,只能把原有變量重新賦值疾掰,所以定義中間變量需要在循環(huán)體外
  3. for循環(huán)的循環(huán)變量i的值,從迭代器中逐個收到徐紧,循環(huán)體中賦值只在本次循環(huán)中生效静檬,甚至直接del i也不會報錯
  4. 減少循環(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á)式:


條件表達(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)贊??擅笔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末志衣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猛们,更是在濱河造成了極大的恐慌念脯,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弯淘,死亡現(xiàn)場離奇詭異绿店,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)庐橙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門假勿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怕午,你說我怎么就攤上這事废登。” “怎么了郁惜?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵堡距,是天一觀的道長。 經(jīng)常有香客問我兆蕉,道長羽戒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任虎韵,我火速辦了婚禮易稠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘包蓝。我一直安慰自己驶社,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布测萎。 她就那樣靜靜地躺著亡电,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硅瞧。 梳的紋絲不亂的頭發(fā)上份乒,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼或辖。 笑死瘾英,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颂暇。 我是一名探鬼主播缺谴,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟀架!你這毒婦竟也來了瓣赂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤片拍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后妓肢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捌省,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年碉钠,在試婚紗的時候發(fā)現(xiàn)自己被綠了纲缓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡喊废,死狀恐怖祝高,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情污筷,我是刑警寧澤工闺,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瓣蛀,受9級特大地震影響陆蟆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惋增,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一叠殷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诈皿,春花似錦林束、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至措左,卻和暖如春依痊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工胸嘁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓶摆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓性宏,卻偏偏與公主長得像群井,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毫胜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容