while循環
while 條件表達式: 語句塊
while語句的條件表達式是循環條件,常用的是關系表達式或者邏輯表達式,語句塊是循環執行的語句。
n=1 p=1 num=int(input("input n=")) while n<num: p*=n n=n+1 print("{0}的階乘是{1}".format(num,p))
input n=6 6的階乘是120
在python中while語句,可以有else語句,else語句會在循環正常執行完的情況下(不管是否執行循環體),但是通過break跳出循環體時,else不會被執行。
num=int(input("put into number=")) qnum=num count=0 while (num!=0): if(num==68): break count+=1 num//=10 else: if count!=0: print("while循環執行完成") else: print("num輸入為0") if num==68: print("break 語句執行,沒有執行else語句") if num==0: count=1 print("%d是%d位數字"%(qnum,count)) if num==68: count=2 print("%d是%d位數字"%(qnum,count))
put into number=888 while循環執行完成 888是3位數字 put into number=0 num輸入為0 0是1位數字 put into number=68 break 語句執行,沒有執行else語句 68是2位數字
while循環合並2個有序的數組,這是歸並排序的重點
def sort(arr1,arr2): i,j,k=0,0,0 arr3=[] while(i<len(arr1) and j<len(arr2)): if arr1[i]<arr2[j]: arr3.insert(k,arr1[i]) i+=1 k+=1 else: arr3.insert(k,arr2[j]) j+=1 k+=1 while i<len(arr1): arr3.insert(k,arr1[i]) i+=1 k+=1 while j<len(arr2): arr3.insert(k,arr2[j]) j=j+1 k=k+1 for elem in arr3: print(elem,end=" ") arr1=[1,3,5,7] arr2=[2,4,6,8,78] sort(arr1,arr2)
1 2 3 4 5 6 7 8 78
for循環
for語句首行定義了賦值目標和遍歷的序列對象,后面需要重復執行的語句塊,語句塊語句需要向右縮進,且縮進量要一致。
for 賦值目標 in 序列對象: 語句塊
for通過遍歷任意序列的元素進行建立循環,針對序列的每一個元素執行一次循環體,列表,字符串,元組都是序列,可以利用它們建立循環。
列表
char=['a','b','c'] for ch in char: print(" ",ch,end=" ")
a b c
字符串
char="abcdefgh" for ch in char: print(ch,end="-")
a-b-c-d-e-f-g-h-
元組
char=(1,2,3,4) for ch in char: print(ch,end="-")
1-2-3-4-
for循環的循環次數顯然就是序列中的元素的個數,即序列的長度,可以利用序列的長度來控制循環的次數,這時關注的不是序列元素的值,而是元素的個數。
計算輸入的元素和,與range無關。
sum=0 for k in range(6): num=int(input("put into numbers:")) sum+=num print("sum=",sum)
結果是:
put into numbers:1 put into numbers:2 put into numbers:3 put into numbers:4 put into numbers:5 put into numbers:6 sum= 21
計算1+.....6的和,和序列的元素有關。
sum=0 for i in range(7): sum+=i; print("the sum=",sum)
the sum= 21
for語句也支持一個可以選擇的else塊,它 的功能就像在while循環中一樣,如果沒有碰到break語句,就會執行else塊,也就是序列所有的元素都被訪問過了之后,執行else塊。
string=input("input char:") for ch in string: if ch=='e': break else: print(" bo break stance") if ch=='e': print("不會執行break語句") else: print("會執行break語句")
input char:abcd bo break stance 會執行break語句
input char:abcde 不會執行break語句
range函數,經常用在for循環中,看看其功能吧。
>>> list(range(6)) [0, 1, 2, 3, 4, 5] >>> list(range(1,6)) [1, 2, 3, 4, 5]
for循環的運用。
二分查找,使用for循環。
def seek(targe=66,arr=[11,22,33,68],left=0,right=3): while left<right: mid=(left+right)//2 i=arr[mid] if i==targe: return mid+1 elif i>targe: right=mid-1 #seek(targe,arr,left,right) else: left=mid+1 #seek(targe,arr,left,right) return -1
for循環,在循序查找的使用。
def seekxunxu(targe=66,arr=[11,22,33,68],left=0,right=3): count=0 for i in arr: count+=1 if i==targe: return count if count==len(arr): return -1
for是計數循環,while是條件循環,python中,for循環有點詭異,for循環和while可以轉換。byd 叉車