循環語句(2)和列表
循環語句2
for 語句
作用:
用來遍歷(所有的事情只經歷一遍)叠代對象的數據元素
講解:火車發現朋友發朋友圈同一兩火車,去找朋友,火車車廂的,把所有的車廂找一遍就能找到他。
可叠代對象是指能一次獲取數據元素的對象
可叠代對象包括:
字符串:str
列表: list
元組: tuple
字典: dict
for 語法
for 變量列表 in 可叠代對象:
語句塊1
else:
語句塊2
說明:
可叠代對象不能在提供對象時,遍歷結束,執行else字句。else可以省略,當循環內部用break語句終止循環時,else字句部分的句子不在執行。
1 # 法一 2 s = 0#用於累加 3 for x in range(1, 101): 4 if x % 5 == 0: 5 continue 6 if x % 7 == 0: 7 continue 8 if x % 11 == 0: 9 continue 10 11 print(x, end=‘ ‘) 12 13 s += x 14 print("和:", s) 15 print("--------------------------------------------") 16 17 # 法二 18 s = 0#用於累加 19 for x in range(1, 101): 20 if x % 5 == 0 or x % 7 == 0 or x % 11 ==0: 21 continue 22 s +=x 23 print(x) 24 25 print("heshi:",s) 26 27 28 (‘szh====>#‘,szh) 29 30 print("當 for語句結束後,szh綁定的是:",szh)
練習:
任意輸入一段字符串
1.計算你輸入的字符‘A’,個數,並打印出來
(要用for的語句,不允許使用s.count()方法)
思考用while語句能否實現上述功能?
1 adeshu=0 2 kgshu=0 3 s=input(‘請輸入字符串‘) 4 for szh in s: 5 if szh == ‘A‘: 6 adeshu +=1 7 if szh == ‘ ‘: 8 kgshu +=1 9 print("A的個數",adeshu)#或print("A的個數",adeshu,"空格數",kgshu) 10 print("空格數",kgshu) 11 12 # count_A =0 13 # count_space =0 14 # i = 0 #獲取索引 15 # while i < len(s): 16 # ch =s[i]#取出字符 17 # #先判斷ch是否是"A" 18 # if ch == ‘A‘: 19 # count_A +=1 20 # if ch == ‘ ‘: 21 # count_space +=1 22 # i +=1#限制循環 23 # print("A的個數",count_A)
24 # print("空格數",count_space)
range() 函數
格式:
range(stop)
從零開始,每次生產一個整數後加1的操作,直到stop為止,(不包含stop)
range(start,stop[,step])
從start開始,每次生產一個整數後移動step,直到stop為止(不包含stop,且step可以是負數)
詳見:
>>>help(range)
作用:
用來創建一個生成一系列整數的可叠代對象(也叫整數序列生產器)
說明:
range函數調用返回的對象可用於for語句來進行一次叠代取出其中的整數
示例:
range(4) #生成0,1,2,3
range(1,10,2) #生成1,3,5,7,9
range(5,0,-2) #生成5,3,1
range(4,0) #空
示例見:range.py
1 for x in range(4): 2 print(x) #0 1 2 3 3 4 print(‘-------------‘) 5 for x in range(3, 6): 6 print(x) 7 print(‘=============‘) 8 9 for i in range(1, 21): 10 print(i, end=‘ ‘) 11 print() 12 13 s=1 14 while s<=20: 15 print(s, end=‘ ‘) 16 s +=1 17 print()
練習:
1求100以內那些整數與自身+1的乘積在對11求余的結果等於8的數
2.寫程序計算 1 + 3 + 5 +... + 99的和
for 語句嵌套
只要是語句就能放在語句能存在的地方
示例:
for x in ‘asb‘:
for y in ‘123‘:
print(x + y)
#現實中可以用來生成有規律的編號,
思考:
for x in range(5):
for y in range(10):
print(x,y,‘ABC‘)
請問這條語句執行多少次?
#50次
練習:
用for語句實現
1.輸入一個數代表正方型的寬度N打印如下:
如:輸入5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
#法一 k=int(input(‘請輸入正方形的寬‘)) for x in range(1,k+1): #列 for x in range(1, k+1):#行數 print(x, end=‘ ‘) print() # 法二 z = int(input(‘請輸入正方形的寬:‘)) j = 0 while j < z: i=1 while i <= z: print(i,end=‘ ‘) i +=1 j +=1 print() else: print()
2.寫程序來改寫上題,如輸入5,打印如下:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
1 # 法一 2 k=int(input(‘請輸入正方形的寬‘)) 3 for line in range(k):#行數 4 for x in range(x,k+x): 5 print(‘%02d‘ % x, end=‘ ‘) 6 print() 7 8 # 法二 9 k=int(input(‘請輸入正方形的寬‘)) 10 for line in range(1, k+1):#行數 11 for x in range(line,k+line): 12 print(‘%02d‘ % x, end=‘ ‘) 13 print() 14 for x in range(5): 15 if x == 2: 16 continue 17 print(x) 18 19 # 打印10以內的偶數 20 for n in range(10): 21 if n %2 ==1:#奇數 22 continue#取下一個數 23 print(n)View Code
continue 語句
問題:
如何讓程序不再向下執行,重新開始新的一次執行
continue語句的作用:
用於循環語句(while,for語句)中,不在執行本次循環內continue之後的語句,重新開始新的循環。
說明:
1.在while語句中執行continue語句,不在執行本次循環內continue之後的語句,直接跳轉到while真值表達式進行判斷。
2.在for語句中執行continue語句,不綁定本次遍歷的元素,繼續遍歷下綁定一個元素。
練習:
輸入一個整數用begin綁定
在輸入一個整數用end綁定
打印從begin開始,到end結束內的全部奇數(不包含end)
1 begin = int(input(‘請輸入:‘)) 2 end = int(input(‘請輸入:‘)) 3 for x in range(begin,end): 4 if x % 2 ==0: 5 continue 6 print(x) 7 8 #用while循環打印10以內的奇數數 9 for n in range(10): 10 if n % 2 ==1: 11 continue 12 print(n) 13 14 15 i=0 16 while i<10: 17 if i %2 ==0:#== 0求奇數/== 1偶數 18 i +=1 19 continue 20 print(i) 21 i +=1View Code
將練習改寫為用while語句
1 begin = int(input(‘請輸入:‘)) 2 end = int(input(‘請輸入:‘)) 3 while begin < end: 4 if begin % 2 == 0: 5 begin +=1 6 continue 7 print(begin) 8 begin +=1 9 10 11 begin = int(input(‘請輸入:‘)) 12 end = int(input(‘請輸入:‘)) 13 i=begin 14 while i<end: 15 if i % 2 ==0: 16 i +=1 17 continue 18 print(i) 19 i +=1 20 21 begin = int(input(‘請輸入:‘)) 22 end = int(input(‘請輸入:‘)) 23 i=begin 24 while i<end: 25 i +=1 26 if (i -1) % 2 ==0: 27 continue 28 print(i-1)View Code
求1~100之間所有不被5,7,11整除的數的和(可以考慮用continue實現)
1 # 法一 2 s = 0#用於累加 3 for x in range(1, 101): 4 if x % 5 == 0: 5 continue 6 if x % 7 == 0: 7 continue 8 if x % 11 == 0: 9 continue 10 11 print(x, end=‘ ‘) 12 13 s += x 14 print("和:", s) 15 print("--------------------------------------------") 16 17 # 法二 18 s = 0#用於累加 19 for x in range(1, 101): 20 if x % 5 == 0 or x % 7 == 0 or x % 11 ==0: 21 continue 22 s +=x 23 print(x) 24 print("heshi:",s)
容器類
列表 list
列表的定義:
1.列表是一種容器(通常用來存儲計算機的數據對象,可以存放任意類型的數據對象)
2.列表是可以被改變的序列 擴展:id(內存地址)不變的情況下改變列表,所以是可變數據類型
3.列表是由一系列特定元素組成的,元素與元素之間可能沒有任何關關聯系,但它們之間有先後順序關系。
創建空列表的字面值方式
l = [] #l綁定空列表
創建非空列表的字面值方式
l = [1,2,3,4]
l = [‘北京‘,‘上海‘,‘深圳‘,‘西安‘]
l = [1,‘two‘,3.14,‘四‘]
l = [1,2,[3.1,3.2,3.3],4]
列表的構造函數 list
list() 生產一個空的列表,等同於[]
list(iterable) 用可叠代對象創建一個列表
示例:
1 l = list() #l = [] 2 l = list(‘hello‘) #l = [‘h‘,‘e‘,‘l‘,‘l‘,‘o‘] 3 l = list(range(5,10,2)) #l = [5,7,9]View Code
列表的運算
運算符:
+ += * *= (算法功能同字符串)
+ :用於拼接列表
>>> x = [1,2,3]
>>> y = [4,5,6]
>>> z = x + y
[ 1, 2, 3,4, 5, 6]
>>> z
>>> z =y + x
>>> z
[4, 5, 6, 1, 2, 3]
+= :用於將右側的可叠代對象的數據追加到原列表
>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x += y
>>> x
[ 1, 2, 3,4, 5, 6]
* : 用於生成重復的列表,新的列表
*=: 賦值生成重復列表,地址不變
比較運算:同字符串規則完全相同:按編碼值依次進行比較,只有依次對應比較的是同類型,不同類型比較會出錯
== != < <= > >=
如:[1,2,3] < [1,3,2] #True
[‘w‘,1] < [2,‘w‘] # 出錯
列表是可叠代對象:
L = [2,3,5,7,11]
for x in L:
print(x)
成員檢查:in/not in
判斷一個元素是否存在列表當中,如果存在則返回True,否則返回False
in 和not in的返回值相反
示例:
1輸入三行文字,將這三行文字保持於一個列表l中,並打印如:
請輸入: abc
123
你好
生成列表如下:[‘abc‘,‘123‘,‘你好‘] print(L)
1 a = ‘abc‘ 2 b = ‘123‘ 3 c = ‘您 好‘ 4 # L = [a, b, c] 5 # print(L) 6 7 # a=input("請輸入") 8 # b=input("請輸入") 9 # c=input("請輸入") 10 # L=[a, b, c] 11 # print(L) 12 13 L = [] 14 a=input("請輸入") 15 b=input("請輸入") 16 c=input("請輸入") 17 L.append(a) 18 L.append(b) 19 L.append(c) 20 print(L)
2.輸入任意行文字,存於列表L中,當不輸入任何內容直接回車後結束輸入
2.1打印L列表中的內容
2.2計算你共輸入了幾行內容
2.3計算你共輸入了多少個字符
1 a = [] 2 h = 0 #行數 3 while True: 4 w = list(input(‘輸入任意行文字‘)) 5 if w ==[]: 6 break 7 a +=w#輸入後列表 8 n = len(a)#輸入後字符長度 9 h +=1 10 print(a,‘輸入的行數‘,h, ‘字符個數‘,n)
3.輸入一個整數(代表樹幹的高度)
打印出如下一棵樹
輸入2
*
***
*
*
輸入3 *
***
1 for i in range(1, w+1):# 打印樹葉 2 # 或:for i in range(w): 3 i +=1 4 print(‘ ‘*(w-i)+‘$‘*(2*i-1)) 5 for g in range(1, w+1): 6 print(‘ ‘*(w-1)+‘$‘) 7 8 9 while True: 10 tree_lenght = int(input(‘請輸入一個樹幹的高度‘)) 11 i = 1 12 j = 1 13 while i <= tree_lenght: 14 print(‘ ‘*(tree_lenght-i)+‘*‘*j,)#弄清楚長度最大值(tree_lenght+2)和空格和i的關系來設置 15 i +=1#控制行數 16 j +=2#控制*號的個數,*號是以+2遞增。 17 for i in range(tree_lenght): 18 print(‘ ‘*(tree_lenght-1)+"*") 19 choice = input("輸入0退出,按其他繼續輸入:") 20 if choice == ‘0‘: 21 break
4.輸入任意一個整數,判斷這個數是否素數(prime),素數(也叫質數),只能被1和本身整除且大於1的正整數。
如:2 3 5 7 11等
提示:
用排除法:當判斷x 是否是素數時,只要讓x分別除以2,3,4,5,..... x-1只要整除了,那x就不是素數,否則x 是素數
1 a = int(input(‘輸入一個整數:‘)) 2 for z in range(2,a-1): 3 if a % z == 0: 4 print(‘不是素數‘) 5 break 6 else: 7 print(‘是素數‘,a)
5.算出100 -1000以內的水仙花數(Naricissistic Number)
水仙花數是指百位的3次方加上十位的3次方加上個位的三次方等於原數
xyz = x**3+z**3+y**3
索引index
切片slice
1 # 法一 2 for s in range(100,1000): 3 a = int(s/100)#百位 4 b = int(s/10%10)#十位 5 c = int(s%10)#個位 6 if s == a**3 + b**3 + c**3: 7 print(s) 11 12 # 法二 13 for z in range(100,1000): 14 a = (int(str(z)[0]))**3 15 b = (int(str(z)[1]))**3 16 c = (int(str(z)[2]))**3 17 if a + b + c == z: 18 print(z) 19 20 # 法三(有誤) 21 def isArmstrongNumber(n): 22 a = [] 23 t = n 24 while t > 0:#循環找出每一位數的值 25 append (t % 10) * t / = 10 26 3 = len(a) 27 return 28 sum([x**3 for x in a ]) ==n 29 for x in range (100,1000): 30 if isArmstrongNumber(n): 31 print x 32 33 # 法四: 34 for a in range(1,10):#百位 35 for b in range(10):#十位 36 for c in range(10):#個位 37 if a*100+b*10+c == a**3 + b**3 + c**3: 38 print(a*100+b*10+c) 39 print(‘a‘,‘b‘,sep=‘ ‘) 40 print(‘a‘,‘b‘,end=‘ ‘) 41 print()
循環語句(2)和列表