版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89951591
夜光序言:
心如止水,乱则不明。很多事,你越是想去弄个清楚,反而越是困惑,心中一旦有了执念。就像线团,只会越扯越乱。子欲避之,反促遇之。凡事顺其自然就好。既来之。则安之,这才是生存之道。
正文:程序控制结构-练习
二分法求平方根
前 50 个素数
循环的退出
1、 正常退出
循环执行完毕后,循环结束或者称为退出。例如:
i=0
while i<4:
print(i)
i=i+1
print("last: ",i)
0
1
2
3
last: 4
执行 4 次后退出,注意退出后 i=4 不是 i=3
2、 break 中途退出
一些情况下要循环中途退出,可以采用 break,例如:
i=0
while i<4:
print(i)
if i%2==1:
break
i=i+1
print("last: ",i)
0
1
last: 1
当执行到 i=1 时就 break 退出,退出时下面的 i=i=1 语句不再执行,退出后 i=1
例 2-4-1:输入一个正整数,判断它是否为一个素数(质数)。
根据数学知识,一个数 n 是素数是指这个数仅可以被 1 和它自己整除,既它没有界于2~(n-1)的因数。
n=input("n=")
n=int(n)
m=2
while m<n:
if n%m==0:
break
m=m+1
if m==n:
print(n," is a prime")
else:
print(n," is not a prime")
例 2-4-2: 输入两个正整数,找出它们的最小公倍数。
设输入的两个数是 a 与 b,最小公倍数一定比它们两个中最大的一个要大,一定不超过a 与 b 的积,比较直接的方法是用一个循环变量从它们中最大的一个数开始不断加大这个变量,直到 a 与 b 都能同时除尽这个数为止,这个数显然是它们的最小公倍数,程序如下:
a=input("a=")
b=input("b=")
a=int(a)
b=int(b)
if a>b:
c=a
else:
c=b
m=a*b
while c<=m:
if c%a==0 and c%b==0:
break
c=c+1
print(c)
例 2-4-3: 输入两个正整数,找出它们的最大公约数。
设输入的两个数是 a 与 b,最大公约数一定比它们两个中最小的一个要小,最小为 1,因此我们先找 a,b 最小的值,从它开始一直向下找,找到一个同时是 a,b 的约数,就是它们的最大公约数:
a=input("a=")
b=input("b=")
a=int(a)
b=int(b)
if a>b:
c=b
else:
c=a
while c>=1:
if a%c==0 and b%c==0:
break
c=c-1
print(c)
while 循环一定要在循环体中自己控制循环变量的变化,不然可能出现死循环,例如:
i=0
while i<4:
print(i)
这个循环中 i 永远为 0 不变化,i<4 永成立,不停打印出 0,成为永远不停止的死循环。
2.4.3 【案例】输入学生成绩
1、案例描述
输入一个在[0,100]范围的学生成绩。
2、案例分析
构造一个无限循环,不停输入实数,一旦输入的实数满足要求就退出。
3、案例代码
#(1) 用一个 while True 控制无限循环,一旦输入正确就 break 退出,不然就反复要求输入,程序如下:
while True:
m=input("Enter mark [0,100]:")
m=float(m)
if m>=0 and m<=100:
break
print("mark=",m)
#(2) 也可以用一个变量 con 来控制循环,程序如下:
con=True
while con
m=input("Enter mark [0,100]:")
m=float(m)
if m>=0 and m<=100:
con=False
print("mark=",m)
#(3) 还可以用 m 来控制,为了然循环开始,先设置 m=1,程序如下:
m=-1
while m<0 or m>100:
m=input("Enter mark [0,100]:")
m=float(m)
print("mark=",m)