大纲
while循环
上节课学到的FOR循环可以用另一种循环来代替处理。例如找出哪些数字是偶数
numbers = [0,1,2,3,4,5,6,7,8,9]
for x in numbers:
if x%2==0:
print(x)
while循环后的条件当得到满足时则运行后面的循环体中的代码,如果不满足则跳出。
n = 0
while n<=9:
if n%2==0:
print(n)
n = n+1
但是他们各有优势,for循环适用于有明确的循环对象的情况,while循环适用于有明确退出条件的情况。
练习:计算偶数
100以内所有偶数的和是多少?
n = 0
sum_n = 0
while n<=100:
if n%2==0:
sum_n = sum_n+n
n = n+1
print(sum_n)
sum_n = 0
for x in range(101):
if x%2==0:
sum_n = sum_n+x
print(sum_n)
死循环
一个葡萄树高170CM,一个蜗牛从底部往上爬,每分钟爬30CM,每爬一分钟后要休息一分钟,休息的时候,会往下滑10CM,计算它需要多少时间才能爬到树顶。
因为这种情况不大好写出退出的条件,所以用一个真值来做条件。
time = 0
high = 0
while True:
time = time + 1
high = high + 30
if(high>=170):
break
time = time + 1
high = high -10
print("蜗牛需要{x}分钟".format(x=time))
这里while后面的条件是true,也就是会一直循环下面,但里面使用了break语句,也就是一个退出条件。如果把退出条件写在while后面,那么计算出来的结果不正确,你能看出为什么吗?
time = 0
high = 0
while high<170:
time = time + 1
high = high + 30
time = time + 1
high = high -10
print("蜗牛需要{x}分钟".format(x=time))
练习:寻找回文数
地满红花红满地,天连碧水碧连天。这是一个回文对联,正读反读都是一样的。在数学中也有类似的现象就是回文数。例如12321就是一个回文数。编写一个程序来判断一个数字是否回文数。
思路是这样的,将原来的数字按位数拆开,再将顺序逆反,组合成新的数字,如果新的数字和原来数字一样,则是一个回文数。
x = 1223
n = x
m = 0
while n>0:
m = m*10+ n%10
n = n//10
if x == m:
print(x,"是一个回文数")
else:
print(x,"不是一个回文数")
另一种处理方式是将它当作字符串来处理
x = 1221
x = str(x)
for i in x:
print(i)
x = 1221
x_list = list(str(x))
y = []
for i in x_list:
y.insert(0,i)
if x_list == y:
print(x,"是一个回文数")
else:
print(x,"不是一个回文数")
练习:寻找最小公倍数
小明每3天去一次图书馆,小王每4天去一次图书馆,有一天他们正好偶遇,问再过多少天,他们会再次相遇?这个问题实际是求两个数字的最小公倍数
x = int(input("x="))
y = int(input("y="))
if x>y:
y,x = x,y
i = 1
s = y*i
while s%x !=0:
i = i+1
s = y*i
print("x和y的最小公倍数是",s)
x=3
y=4
x和y的最小公倍数是 12
练习:寻找最大公约数
x = int(input("x="))
y = int(input("y="))
if x>y:
y,x = x,y
i=x
while i>0:
if (x%i==0) and (y%i==0):
break
i = i-1
print("x和y的最大公约数是",i)
x=18
y=15
x和y的最大公约数是 3
x = int(input("x="))
y = int(input("y="))
if x>y:
y,x = x,y
i=x
while (i>0) and ((x%i!=0) or (y%i!=0)):
i = i-1
print("x和y的最大公约数是",i)
x=18
y=15
x和y的最大公约数是 3
辗转相除法来求最大公约数
x = int(input("x="))
y = int(input("y="))
if x>y:
y,x = x,y
r = y%x
while r!=0:
y = x
x = r
r = y%x
print("x和y的最大公约数是",x)
x=18
y=15
x和y的最大公约数是 3