python第六讲课后题疑问
题目爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。答案:x = 7
i = 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('在程序限定的范围内找不到答案!')
疑问:为什么结果输出是x=119 而不是x=700,但是i=707?
谢谢! 这个程序运行,得到的结果是i = 101,并不是707,同时,因为对于这个程序,当x符合条件时while循环并不会结束,只有循环到i > 100时,循环会结束,进而执行下面语句。
因此,i = 101。并且因为此时,存在x符合条件,所以,flag = 1,进而在下面打印出了阶梯数。 关键看这一段,每次循环的时候,当x不符合上面的条件,就会运行else的语句,就是把x在原有值上加7然后到下次循环再来验证,当发现了第一个相符的数119后,就会执行flag=1这一句,而else的语句就不会被执行了,x值就固定在119了,虽然每次循环i都会加1,但是x值不变了,只会再次执行flag=1,一直到最后i值大于100了退出循环,这时i=101,但是x值仍然是119,所以不会有700的值出现。
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):#在i=17之前,x不符合条件,所以执行else增加x值,17后,x=119,每次循环都会符合条件
flag = 1
else: #i小于17之前一直执行这一句,最终x=7*17=119后,由于119符合上面的条件,所以else将不再执行
x = 7 * (i+1)
标答既繁琐不易理解,而且浪费效率,找出答案后还要执行无谓的循环,不如改成这样:
x = 7
i = 1
while True:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
break
x = 7 * (i+1)
i += 1
print('阶梯数是:', x)
或者用for循环更高效:
for x in range(7,int(input('请输入需要查找阶梯数的范围:')),7):
print('%d\n' % x if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) else '', end='')
小泉app 发表于 2020-5-5 00:35
这个程序运行,得到的结果是i = 101,并不是707,同时,因为对于这个程序,当x符合条件时while循环并不会结 ...
谢谢 txxcat 发表于 2020-5-5 01:45
关键看这一段,每次循环的时候,当x不符合上面的条件,就会运行else的语句,就是把x在原有值上加7然后到下 ...
懂了懂了!十分感谢! octopus02 发表于 2020-5-5 10:02
懂了懂了!十分感谢!
如果问题解决,请设【最佳答案】
页:
[1]