python第六课的动动手第二题
x = 7i = 1
flag = 0
while i <= 100:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
i += 1
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
小甲鱼写的这个我没看明白怎么跳出循环的,来个大佬帮我解答一下,谢谢!{:9_241:}
我是这样写的:
x = 7
a= 1
while a == 1:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
print(x)
a = 2#如果我把这里换成“x = x + 1”,答案是有若干的,真正的答案应该是无解的,因为太多了,但第一个满足条件的数字是119.
else:
x = x + 1
本帖最后由 昨非 于 2021-1-5 13:10 编辑
这是小甲鱼答案的解释:
x = 7
i = 1
flag = 0
while i <= 100:#循环变量是i,因为题目要找满足条件的最小x值,所以这里写成i<=1000000也是一样的结果,这个100不用思考为什么
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) #x是7的整数倍所以七个七个的跳着取值,之所以这么写,是为了减少一个一个比较的运算量(提高执行速度)
i += 1
#当i=17时,x=119,刚好是满足题目的最小值,此次循环中,执行if,标识符flag变为1,else不执行,所以之后的x值不变,一直为119
#下次循环:i+=1,只执行if,x不变,直到i>100,跳出循环
if flag == 1:#根据标实符flag打印结果(仍为119)
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
你的答案:
x = 7
a= 1
while a == 1:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
print(x)
a = 2
else:
x = x + 1
#你的答案里,x本身是循环变量,循环条件由a的值来控制,答案是对的,只不过因为是一格一格比较的,运算次数是小甲鱼答案的七倍,
# 当然,程序简单,这点儿差异根本察觉不到
如果不限制只输出最小值的话,可以这么改:
x = 7
while 1:#死循环 (就不必用a来判断了)
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and(x%7==0):
print(x)
x = x + 1#不必加else分支,直接写在while循环里,缩进与if平级作为循环变量即可
if x>1000: #避免死循环,只输出前1000以内的符合条件的值
break
测试结果为(1000以内):
119
329
539
749
959 昨非 发表于 2021-1-5 12:59
也就是说当i=17时满足了条件,但是还在执行i+=1此时X值没有变化,实际上i=18至i=101都执行了,当i=101时while后边的条件不满足,此时跳出循环体,开始执行if fiag ==1:的语句对吗{:9_237:} 江湖菜鸟 发表于 2021-1-5 13:13
也就是说当i=17时满足了条件,但是还在执行i+=1此时X值没有变化,实际上i=18至i=101都执行了,当i=101时w ...
对的,直到x=119之后,i增加直到跳出while循环,x不随之变话了 解释满意的话还请设置个最佳答案哈 昨非 发表于 2021-1-5 13:14
对的,直到x=119之后,i增加直到跳出while循环,x不随之变话了
谢谢,这下弄明白了,已设最佳{:9_217:}
页:
[1]