Python for Kids
  • 0 前言
  • 1 编程环境准备
  • 2 运算符和表达式
  • 3 掌握变量
  • 4 字符串
  • 5 获取用户的输入
  • 6 条件判断
  • 7 条件判断实操
  • 8 FOR循环
  • 9 循环和列表
  • 10 WHILE循环
  • 11 WHILE循环实操
  • 12 WHILE循环再实操
  • 13 多重循环
  • 14 再谈列表
  • 15 初见函数
  • 16 函数实操
  • 17 选择排序
  • 18 冒泡排序
  • 19 递归算法之一
  • 20 递归算法实操
  • 21 快速排序
  • 22 汉诺塔游戏
  • 23 递推算法
  • 24 分治算法
  • 25 集合与组合
  • 26 贪心算法
  • 27 字典和键值对
  • 28 广度优先搜索算法
  • 29 数组和向量化计算
  • 30 随机和模拟
  • 31 数据可视化
  • 32 文件读取和分析
Powered by GitBook
On this page
  • 大纲
  • while循环
  • 练习:计算偶数
  • 死循环
  • 练习:寻找回文数
  • 练习:寻找最小公倍数
  • 练习:寻找最大公约数

Was this helpful?

10 WHILE循环

循环又来啦

大纲

  • while循环

  • 练习:计算偶数

  • 死循环

  • 练习:回文数

  • 练习:最小公倍数

  • 练习:最大公约数

while循环

上节课学到的FOR循环可以用另一种循环来代替处理。例如找出哪些数字是偶数

numbers = [0,1,2,3,4,5,6,7,8,9]
for x in numbers:
    if x%2==0:
        print(x)
0
2
4
6
8

while循环后的条件当得到满足时则运行后面的循环体中的代码,如果不满足则跳出。

n = 0
while n<=9:
    if n%2==0:
        print(n)
    n = n+1
0
2
4
6
8

但是他们各有优势,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)
2550
sum_n = 0
for x in range(101):
    if x%2==0:
        sum_n = sum_n+x
print(sum_n)
2550

死循环

一个葡萄树高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))
蜗牛需要15分钟

这里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))
蜗牛需要18分钟

练习:寻找回文数

地满红花红满地,天连碧水碧连天。这是一个回文对联,正读反读都是一样的。在数学中也有类似的现象就是回文数。例如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,"不是一个回文数")
1223 不是一个回文数

另一种处理方式是将它当作字符串来处理

x = 1221
x = str(x)
for i in x:
    print(i)
1
2
2
1
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,"不是一个回文数")
1221 是一个回文数

练习:寻找最小公倍数

小明每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
Previous9 循环和列表Next11 WHILE循环实操

Last updated 4 years ago

Was this helpful?