1. 程式人生 > >循環語句(2)和列表

循環語句(2)和列表

函數 包含 格式 con closed 關系 控制 list() range

循環語句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’,個數,並打印出來

2.計算出空格的個數,並打印出來
(要用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 +=1
View 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)和列表