YYF有点骚 发表于 2020-7-8 11:13:12

大佬救救我

if与else难道不是代表条件的选择吗,为什么python3的短路逻辑的作业里边的动动手会是如下情况:
if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
      FIND = True
      break
    else:
      steps = 7 * (i + 1)
以下代码为什么可以同时满足“若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;只有每步上 7 阶,最后刚好一阶也不剩。”

Twilight6 发表于 2020-7-8 11:17:46


你缩进错了, if 和 else 要同缩进下

而且 if-else 代表 如果条件成立执行 if 下面的代码块,否则执行 else 的代码块

而为什么能满足呢?因为 % 是求余运算符呀:

if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):

这边的条件就是符合题意的 若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶

而 只有每步上 7 阶,最后刚好一阶也不剩。因为你初始值的 steps 一开始就设置为 7 了 然后每次跨步子都是 +7 进行跨的,所以始终会符合这个题意,if 条件里就不用加上 steps % 7 == 0



heidern0612 发表于 2020-7-8 11:18:31

“若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;只有每步上 7 阶,最后刚好一阶也不剩。”

等同于 if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5)

加上else的 steps = 7 * (i + 1),也就是7的倍数。

if里的条件不就简单的, if (steps % 2 == 1)等同于 若每步上 2 阶,最后剩 1 阶;,后面类推就好。

zkami 发表于 2020-7-8 13:47:49

steps = 7 * (i + 1)   一直是7的倍数所以一直满足可以不写了

YYF有点骚 发表于 2020-7-9 10:34:01

Twilight6 发表于 2020-7-8 11:17
你缩进错了, if 和 else 要同缩进下

而且 if-else 代表 如果条件成立执行 if 下面的代码块,否则执行 ...

所以说:steps = 7*(i + 1)是可以不用写吗

Twilight6 发表于 2020-7-9 10:34:52

YYF有点骚 发表于 2020-7-9 10:34
所以说:steps = 7*(i + 1)是可以不用写吗

这个不行哈,这个代码就是为了保证符合 steps % 7 == 0 这个条件的

YYF有点骚 发表于 2020-7-10 10:22:45

Twilight6 发表于 2020-7-9 10:34
这个不行哈,这个代码就是为了保证符合 steps % 7 == 0 这个条件的

我有点晕{:5_107:},既然这个代码保证 steps % 7==0的话,那么必须台阶数不符合第一个if,这样的话不就又不符合题意了吗{:5_96:}

Twilight6 发表于 2020-7-10 10:26:26

YYF有点骚 发表于 2020-7-10 10:22
我有点晕,既然这个代码保证 steps % 7==0的话,那么必须台阶数不符合第一个if,这样的话不就又 ...


不会啊,这几个条件都要成立啊

你不会认为台阶数 steps % 7==0 为 7 的倍数 就导致第一个条件不成立了?

你试试 119 ,这个就是爱因斯坦阶梯,满足以上所有条件


YYF有点骚 发表于 2020-7-10 10:43:58

Twilight6 发表于 2020-7-10 10:26
不会啊,这几个条件都要成立啊

你不会认为台阶数 steps % 7==0 为 7 的倍数 就导致第一个条件不成 ...

我的意思是如果满足了第一个if,程序岂不是结束循环不经过else了吗

Twilight6 发表于 2020-7-10 10:45:04

YYF有点骚 发表于 2020-7-10 10:43
我的意思是如果满足了第一个if,程序岂不是结束循环不经过else了吗

你这里 if 里面设置了 break ,就是只找到一个就退出循环了,根本不会有下次循环

YYF有点骚 发表于 2020-7-14 11:09:17

Twilight6 发表于 2020-7-10 10:45
你这里 if 里面设置了 break ,就是只找到一个就退出循环了,根本不会有下次循环

我发现我哪里不懂了:steps = 7*(i + 1)代表了什么

Twilight6 发表于 2020-7-14 11:10:43

YYF有点骚 发表于 2020-7-14 11:09
我发现我哪里不懂了:steps = 7*(i + 1)代表了什么

代表了每次循环阶梯数 +7 ,因为我们从题目中可以看出阶梯数一定要满足被 7 整除,所以我们设置 7 的倍数就一定会被 7 整除
页: [1]
查看完整版本: 大佬救救我