Heart3 发表于 2021-9-6 19:34:42

Python第六讲 爱因斯坦难题编程题

第6行执行到   ifflag=1如果执行到这会直接跳到10行ifflag ==1这一行执行吗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('在程序限定的范围内找不到答案!')

白two 发表于 2021-9-6 20:08:03

本帖最后由 白two 于 2021-9-6 20:10 编辑

不会,会把循环跑完,你要是想跳到后面,加一个 break 即可:
x = 1
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
      break
    else:
      x = 7 * (i + 1)# 根据题意,x一定是7的整数倍,所以每次乘以7
    i += 1
if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')



Heart3 发表于 2021-9-6 20:24:38

好的,您好有个疑问:
这个原始程序跑出来是119,i=16,此时while循环下if条件成立,且满足循环条件,如果继续循环的话最后输出的结果是707。
我是这样想的,不知道哪出问题了。。请指教!

wp231957 发表于 2021-9-6 20:49:58

Heart3 发表于 2021-9-6 20:24
好的,您好有个疑问:
这个原始程序跑出来是119,i=16,此时while循环下if条件成立,且满足循环条件,如果 ...

答案肯定不止一个啊

Heart3 发表于 2021-9-6 21:06:54

wp231957 发表于 2021-9-6 20:49
答案肯定不止一个啊

但是这个原始程序运行出来是只有119
不明白的是   当结束while循环的时候,x值等于707,结果为什么会是119呢

傻眼貓咪 发表于 2021-9-6 21:16:24

if flag == 1 可以簡化為 if flag
1 就是 True (除了0 所有數字都是True)

Heart3 发表于 2021-9-6 21:22:36

傻眼貓咪 发表于 2021-9-6 21:16


这个程序结果是119
运行时候,第六行 满足flag=1的时候,此时x=119就不会变化了吗

傻眼貓咪 发表于 2021-9-6 21:40:57

本帖最后由 傻眼貓咪 于 2021-9-6 21:44 编辑

Heart3 发表于 2021-9-6 21:22
这个程序结果是119
运行时候,第六行 满足flag=1的时候,此时x=119就不会变化了吗

满足flag=1的時候,你沒有叫它退出啊
除非 break,否則會繼續循環遍歷{:5_99:}

while 條件:
    if 條件:
      # 代碼沒有退出的意思,則繼續循環

Heart3 发表于 2021-9-6 21:52:16

那这个原始程序结果该是什么呢?    119是正确的吗

傻眼貓咪 发表于 2021-9-6 22:01:50

for 和 while 兩者真正用途:
for 當你知道該循環多少次
while 你只知道循環結束條件,但不知道循環多少次才會達到該條件

你的代碼明顯知道循環次數啊(就100次啊),為什麼要用 while?
應該用 for i in range(1, 101)

但是題目是用 while 沒有錯,只是不該局限 100次循環,而是達到某條件就退出

爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
明顯只知道條件,而根本不知道循環次數吧?
只是好奇為什麼你會預先知道 i = 100 以內會有答案?

正確寫法應該是:
i = 1
while True:
    if (i%2 == 1) and (i%3 == 2) and (i%5 == 4) and (i%6 == 5) and (i%7 == 0):
      print(i)
      break
    i += 1

結果:
119

傻眼貓咪 发表于 2021-9-6 22:04:46

Heart3 发表于 2021-9-6 21:52
那这个原始程序结果该是什么呢?    119是正确的吗

119 是正確的

Heart3 发表于 2021-9-6 22:14:09

感谢&#128591;
页: [1]
查看完整版本: Python第六讲 爱因斯坦难题编程题