循环很重要,计算机很蠢,唯一的优势就是按照指令不停的执行,所以决定在说一下。
break语句,用在循环体中,迫使循环立即终止,即跳出所在循环体,继续执行循环体后面的语句。
sum=0
i=1
while i:
sum+=i
i+=1
if i>=101:
break
print(" the 1+2+..100={}".format(sum))
the 1+2+..100=5050
break 经常和if语句使用,满足条件跳出循环体,但是据大佬说,循环中不建议使用break语句,跳来跳出逻辑容易出现问题。就像被抛弃的goto
def maxys(m,n):
r=m%n
while r!=0:
m=n
n=r
r=m%n
return n
>>> maxys(33,11)
11
>>> maxys(6,5)
continue语句,与break语句不同,在循环中执行continue语句,并不会退出循环语句,而是立即结束本次循环,重新开始下一次循环
def printthreenum(n):
for i in range(1,n+1):
if i%3==0:
continue
print(" %d"%(i),end=" ")
>>> printthreenum(20)
1 2 4 5 7 8 10 11 13 14 16 17 19 20
循环嵌套,基本复杂点的code,都涉及到嵌套问题。
公约数的因子,求最大公约数,暴力法解决
def maxys(m,n):
i=2
max=1
while i<=m and i<=n:
while m%i==0 and n%i==0:
max*=i
m=m//i
n=n//i
i+=1
return max
>>> maxys(8,2)
2
>>> maxys(13,2)
1
采用减治法的插入排序,算法
def sort(arr):
i=0
while i<len(arr)-1:
j=i+1
temp=arr[j]
flag=0
while j>0:
if arr[j-1]>temp:
arr[j]=arr[j-1]
j-=1
flag=1
else:
break
if flag:
arr[j]=temp
i+=1
return arr
arr=[66,1,-8,22,88]
sort(arr)
[-8, 1,22, 33, 66]
选择排序法:每次选择最小元素放在合适的位置。
def xzsort(arr):
i=0
while i<len(arr)-1:
min=arr[i]
j=i+1
#选择[i,len(list)-1]中最小的元素
while j<len(arr):
if min>arr[j]:
min=arr[j]
j+=1
id=arr.index(min) #记录要交换的元素下标
#交换
if min!=arr[i]:
#temp=arr[i]
#arr[i]=min
#arr[id]=temp
arr[i],arr[id]=arr[id],arr[i]
i=i+1
return arr
arr=[66,-5,99,56,4,668,68]
xzsort(arr)
[-5, 4, 56, 66, 68, 99, 668]
我是c系,对python的思维还是欠缺,选择排序,出现了不少小问题,无论是循环缩进,还是python的list的下标获取,以及交换。。。
乘法口诀表
for i in range(1,10):
for j in range(1,i+1):
print("{}*{}={}".format(j,i,i*j),end=" ")
print()
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=