日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第五章 条件、循环及其他语句

發布時間:2023/12/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第五章 条件、循环及其他语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第五章 條件、循環及其他語句

再談print和import

print現在實際上是一個函數

1,打印多個參數

用逗號分隔,打印多個表達式
sep自定義分隔符,默認空格
end自定義結束字符串,默認換行

print("beyond",'yanyu',23)#結果為:beyond yanyu 23 a = "beyond," b = "yanyu" c = 23 print(a, b, c)#結果為:beyond, yanyu 23 print(a, b + ',' ,c)#結果為:beyond, yanyu, 23 print("I","love","the","beyond","band",sep="_")#結果為:I_love_the_beyond_band print('Hello,', end='') #結果為:Hello, 不會換行

2,導入時重命名as

導入整個模塊并給它指定別名

import math as beyond beyond.sqrt(4)#結果為:2.0

導入特定函數并給它指定別名

from math import sqrt as beyond beyond(4)#結果為:2.0

賦值魔法

1,序列解包

序列解包(或可迭代對象解包):將一個序列(或任何可迭代對象)解包,并將得到的值存儲到一系列變量中

#可同時(并行)給多個變量賦值 x, y, z = 1, 2, 3 print(x,y,z,sep="-")#結果為:1-2-3#交換多個變量的值 x, y = y, x print(x,y,z,sep=",")#結果為:2,1,3 beyond = 1,2,3 beyond#結果為:(1, 2, 3) x,y,z = beyond x#結果為:1 y#結果為:2 z#結果為:3

假設要從字典中隨便獲取(或刪除)一個鍵-值對,可使用方法popitem,隨便獲取一個鍵-值對并以元組的方式返回,接下來,可直接將返回的元組解包到兩個變量中

beyond ={"name":"huangjiaju","age":31} key,value = beyond.popitem() key#結果為:name value#結果為:huangjiaju

左右兩邊列出的目標個數必須相同,否則會報異常
可使用星號運算符(*)來收集多余的值,這樣無需確保值和變量的個數相同
帶星號的變量最終包含的總是一個列表

x, y, z = 1, 2#結果為:報錯 x, y, z = 1, 2, 3, 4#結果為:報錯 a, b, *c= [1, 2, 3, 4] c#結果為:[3, 4] a, b, c#結果為:(1, 2, [3, 4])name = "I like the beyond band" x, *y, z = name.split() x#結果為:'I' y#結果為:['like', 'the', 'beyond'] z#結果為:'band'

2,鏈式賦值

將多個變量關聯到同一個值

x = y = beyond()等價于 y = beyond() x = y不等價!!! x = beyond() y = beyond()

3,增強賦值

將右邊表達式中的運算符移到賦值運算符的前面

x = 2 x += 1 x#結果為:3 x *= 2 x#結果為:6yy = "beyond" yy += "huangjiaju" yy#結果為:'beyondhuangjiaju' yy *= 2 yy#結果為:'beyondhuangjiajubeyondhuangjiaju'

代碼塊:縮進的樂趣

代碼塊其實并不是一種語句,代碼塊是一組語句,代碼塊是通過縮進代碼(即在前面加空格)來創建的
在Python中,使用冒號(:)指出接下來是一個代碼塊

條件和條件語句

1,布爾值

假(0):False None 0 "" () [] {},其他則為真(1)
雖然[]和""都為假,但它們并不相等(即[] != "")
布爾值True和False屬于類型bool
于任何值都可用作布爾值

True + False + 42#結果為:43 1+0+42=43 bool(42)#結果為:True bool('')#結果為:False bool(0)#結果為:False

2,有條件的執行和if語句

如果條件(if和冒號之間的表達式)為前面定義的真,就執行后續代碼塊(這里是一條print語句);如果條件為假,就不執行

name = input('What is your name? ') if name.endswith('beyond'): #以beyond結尾的名字為真print('Hello, Mr. beyond') name = input('What is your name?') if name.endswith('yanyu'): #以yanyu結尾的名字為真print('Hello, Mr. yanyu') else: print('Hello, stranger')

3,else子句

條件表達式——C語言中三目運算符的Python版本
"語句1" if 條件 else "語句2"如果條件為真,則執行語句1,否則執行語句2

name = input('What is your name?') status = "friend" if name.endswith("beyond") else "stranger"

4,elif 子句

要檢查多個條件,可使用elif,elif是else if的縮寫

num = int(input('Enter a number: ')) if num > 0: print('The number is positive') elif num < 0: print('The number is negative') else: print('The number is zero')

5,代碼塊嵌套

name = input('What is your name? ') if name.endswith('Gumby'): #以Gumby結尾都為真if name.startswith('Mr.'): #以Mr.開始都為真print('Hello, Mr. Gumby') elif name.startswith('Mrs.'): print('Hello, Mrs. Gumby') else: print('Hello, Gumby') else: print('Hello, stranger')

6,更復雜的條件

1,比較運算符

在條件表達式中,最基本的運算符可能是比較運算符,它們用于執行比較

表達式描述
x == yx等于y
x < yx小于y
x > yx大于y
x >= yx大于或等于y
x <= yx小于或等于y
x != yx不等于y
x is yx和y是同一個對象
x is not yx和y是不同的對象
x in yx是容器(如序列)y的成員
x not in yx不是容器(如序列)y的成員
1,相等運算符

比較運算符,用兩個等號(==)表示
一個等號是賦值運算符,用于修改值

"foo" == "foo"#結果為:True "foo" == "bar"#結果為:False"foo" = "foo"#報錯
2,is:相同運算符
''' 變量x和y指向同一個列表 而z指向另一個列表(其中包含的值以及這些值的排列順序都與前一個列表相同) ''' x = y = [1, 2, 3] z = [1, 2, 3] x == y #結果為:True x == z #結果為:True x is y #結果為:True x is z #結果為:False

==用來檢查兩個對象是否相等
is用來檢查兩個對象是否相同(是同一個對象)

3,in:成員資格運算符
name = input('What is your name?') if 's' in name:print('Your name contains the letter "s".') else: print('Your name does not contain the letter "s".')
4,字符串和序列的比較

根據字符的字母排列順序進行比較的

"alpha" < "beta"#結果為:True

要獲悉字母的順序值,可使用函數ord
這個函數的作用與函數chr相反

ord("🐕")#結果為:128021 chr(128021)#結果為:🐕

可使用字符串方法lower對設計大寫字母的字符串進行比較

"a".lower() < "B".lower()#結果為:True 'FnOrD'.lower() == 'Fnord'.lower()#結果為:True[1, 2] < [2, 1]#結果為:True [2, [1, 4]] < [2, [1, 5]]#結果為:True

2,布爾運算符

讀取一個數,并檢查這個數是否位于1~10(含)

number = int(input('Enter a number between 1 and 10: ')) if number <= 10 and number >= 1: print('Great!') else: print('Wrong!')

運算符and是一個布爾運算符,還有另外兩個布爾運算符:or和not
布爾運算符有個有趣的特征:只做必要的計算

7,斷言

使用關鍵字assert,要求某些條件得到滿足
assert語句充當檢查點

age = 10 assert 0 < age < 100 age = -1 assert 0 < age < 100#結果為:報錯!!!還可在條件后面添加一個字符串,對斷言做出說明 age = -1 assert 0 < age < 100, 'The age must be realistic'#結果為:AssertionError: The age must be realistic

循環

1,while 循環

打印1-100

x = 1 while x <= 100: print(x) x += 1 name = '' while not name: name = input('Please enter your name: ') print('Hello, {}!'.format(name))

2,for 循環

可迭代對象是可使用for循環進行遍歷的對象

words = ['this', 'is', 'an', 'ex', 'parrot'] for word in words: print(word) numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for number in numbers: print(number)

鑒于迭代(也就是遍歷)特定范圍內的數是一種常見的任務
函數range可實現迭代,左閉右開
如果只提供了一個位置,將把這個位置視為結束位置,并假定起始位置為0

range(0, 10)#結果為:range(0, 10) list(range(0, 10))#結果為:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] range(10)#結果為:range(0, 10) for number in range(1,101): print(number)

3,迭代字典

通過key來遍歷字典d
只對值感興趣,可使用d.values
d.items以元組的方式返回鍵?值對
for循環的優點之一是,可在其中使用序列解包

d = {'x': 1, 'y': 2, 'z': 3} for key in d: print(key, 'corresponds to', d[key]) for key, value in d.items(): print(key, 'corresponds to', value) ''' 結果為: x corresponds to 1 y corresponds to 2 z corresponds to 3 x corresponds to 1 y corresponds to 2 z corresponds to 3 '''

4,一些迭代工具

并行迭代

names = ['anne', 'beth', 'george', 'damon'] ages = [12, 45, 32, 102] for i in range(len(names)): print(names[i], 'is', ages[i], 'years old')''' anne is 12 years old beth is 45 years old george is 32 years old damon is 102 years old '''

1,并行迭代

內置函數zip,它將兩個序列“縫合”起來,并返回一個由元組組成的序列
可使用list將其轉換為列表

names = ['anne', 'beth', 'george', 'damon'] ages = [12, 45, 32, 102]list(zip(names,ages))#結果為:[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]for name, age in zip(names, ages): print(name, 'is', age, 'years old') ''' 結果為: anne is 12 years old beth is 45 years old george is 32 years old damon is 102 years old '''

當序列的長度不同時,函數zip將在最短的序列用完后停止“縫合”

list(zip(range(5), range(1000)))#結果為:[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

2,迭代時獲取索引

替換一個字符串列表中所有包含子串’xxx’的字符串
使用內置函數enumerate

for index, string in enumerate(strings): if 'xxx' in string: strings[index] = '[censored]'

3,反向迭代和排序后再迭代

函數:reversed和sorted,類似于列表方法reverse和sort
不修改對象,而是返回反轉和排序后的版本
sorted返回一個列表,而reversed像zip那樣返回一個更神秘的可迭代對象

sorted([4, 3, 6, 8, 3])#結果為:[3, 3, 4, 6, 8] sorted('Hello, beyond!')#結果為:[' ', '!', ',', 'H', 'b', 'd', 'e', 'e', 'l', 'l', 'n', 'o', 'o', 'y'] list(reversed('Hello, beyond!'))#結果為:['!', 'd', 'n', 'o', 'y', 'e', 'b', ' ', ',', 'o', 'l', 'l', 'e', 'H'] 'Y'.join(reversed('Hello, beyond!'))#結果為:'!YdYnYoYyYeYbY Y,YoYlYlYeYH' ''.join(reversed('Hello, beyond!'))#結果為:'!dnoyeb ,olleH'

要按字母表排序,可先轉換為小寫

sorted("aBc", key=str.lower)#結果為:['a', 'B', 'c']

5,跳出循環

1,break

找出小于100的最大平方值

from math import sqrt for n in range(99, 0, -1): root = sqrt(n) if root == int(root): print(n) break #結果為:81

2,continue

結束當前迭代,并跳到下一次迭代開頭,即跳過循環體中余下的語句,但不結束循環

偽代碼 for x in seq: if condition1: continueif condition2: continuedo_something() do_something_else() do_another_thing() etc()

3,while True/break成例

在用戶根據提示輸入單詞時執行某種操作,并在用戶沒有提供單詞時結束循環

while True: word = input('Please enter a word: ') if not word: break print('The word was ', word)

6,循環中的 else 子句

from math import sqrt for n in range(99, 81, -1): root = sqrt(n) if root == int(root): print(n) break else: print("Didn't find it!")

簡單推導

列表推導是一種從其他列表創建列表的方式,工作原理類似于for循環

[x * x for x in range(10)]#結果為:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81][x*x for x in range(10) if x % 3 == 0]#結果為:[0, 9, 36, 81] [(x, y) for x in range(3) for y in range(3)]#結果為:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] #與下列for循環效果等價 result = [] for x in range(3):for y in range(3):result.append((x, y)) #結果為:[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

b在boys列表中,g在girls列表中,若倆名字首字母相等則配對

girls = ['alice', 'bernice', 'clarice'] boys = ['chris', 'arnold', 'bob'] [b+'+'+g for b in boys for g in girls if b[0] == g[0]]#結果為:['chris+clarice', 'arnold+alice', 'bob+bernice']

使用圓括號代替方括號并不能實現元組推導,而是將創建生成器
可使用花括號來執行字典推導

squares = {i:"{} squared is {}".format(i, i**2) for i in range(10)} squares[8]#結果為:'8 squared is 64'

在列表推導中,for前面只有一個表達式
在字典推導中,for前面有兩個用冒號分隔的表達式,分別為鍵及其對應的值

三人行

pass、del和exec

1,pass:什么都不做

name = input('your name input,please:') if name == 'beyond': print('Welcome!') elif name == 'huangjiaju': pass elif name == 'yanyu': print('Game Over') else:print("Goodbuy")

2,使用del刪除

robin和scoundrel指向同一個字典,因此將None賦給scoundrel后,依然可以通過robin
來訪問這個字典
但將robin也設置為None之后,Python解釋器直接將其刪除,這被稱為垃圾收集

scoundrel = {'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'} robin = scoundrel print(scoundrel) #{'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'} print(robin) #{'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'} scoundrel = None print(robin) #{'age': 42, 'first name': 'Robin', 'last name': 'of Locksley'} robin = None print(robin)#結果為:None x= 1 del x x#結果為:報錯 del不僅會刪除到對象的引用,還會刪除名稱本身

x和y指向同一個列表,但刪除x對y沒有任何影響
只刪除名稱x,而沒有刪除列表本身(值)
在Python中,根本就沒有辦法刪除值
對于你不再使用的值,Python解釋器會立即將其刪除

x = ['beyond',"yanyu"] y = x y[1] = 'huangjiaju' print(x)#結果為:['beyond', 'huangjiaju'] del x print(y)#結果為:['beyond', 'huangjiaju']

3,使用exec和eval執行字符串及計算其結果

1,exec

函數exec將字符串作為代碼執行,執行一系列python語句,exec本身是條語句,什么都不返回

exec("print('Hello, world!')")#結果為:Hello, world!

函數exec主要用于動態地創建代碼字符串
調用函數exec時只給它提供一個參數絕非好事。
在大多數情況下,還應向它傳遞一個命名空間——用于放置變量的地方(命名空間視為放置變量的地方,類似于一個看不見的字典)
否則代碼將污染你的命名空間,即修改你的變量
將scope打印出來,發現其中包含所有內置函數和值的字典__builtins__。

from math import sqrt exec("sqrt = 1") sqrt(4)#結果為:報錯,改變了該變量 from math import sqrt scope = {} exec("sqrt = 1",scope) sqrt(4)#結果為:2.0 scope['sqrt']#結果為:1len(scope)#結果為:2 scope.keys()#結果為:['sqrt', '__builtins__']

2,eval

eval計算用字符串表示的Python表達式的值,并返回結果
也可向eval提供一個命名空間
類似Python計算器

eval(input("please input some number: ")) #please input some number:1+2+3 #結果為:6

向exec或eval提供命名空間時,可在使用這個命名空間前在其中添加一些值

scope = {} scope['x'] = 2 scope['y'] = 3 eval('x * y', scope)#結果為:6

同一個命名空間可用于多次調用exec或eval

scope = {} exec('x = 2', scope) eval('x * x', scope)#結果為:4

本章節介紹的新函數

函數描述
chr(n)返回一個字符串,其中只包含一個字符,這個字符對應于傳入的順序值n(0 ≤ n < 256)
eval(source[,globals[,locals]])計算并返回字符串表示的表達式的結果
exec(source[, globals[, locals]])將字符串作為語句執行
enumerate(seq)生成可迭代的索引?值對
ord?接受一個只包含一個字符的字符串,并返回這個字符的順序值(一個整數)
range([start,] stop[, step])創建一個由整數組成的列表
reversed(seq)按相反的順序返回seq中的值,以便用于迭代
sorted(seq[,cmp][,key][,reverse])返回一個列表,其中包含seq中的所有值且這些值是經過排序的
xrange([start,] stop[, step])創建一個用于迭代的xrange對象
zip(seq1, seq2,…)創建一個適合用于并行迭代的新序列

總結

以上是生活随笔為你收集整理的第五章 条件、循环及其他语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。