零基础Python 11讲 作业咨询
#向大佬们求教:# 由于目标值必须是能被7整除,所以我们将测试每个7的倍数
steps = 7
i = 1
FIND = False
while i < 100:
# 由于测试的都是7的倍数
# 因此只要同时满足除以2余1、除以3余2、除以5余4、除以6余5,就是最终的结果
if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
FIND = True
break
else:
steps = 7 * (i + 1) #这里我用steps = steps * (i+1)为什么会出现错误的结果呢
i = i + 1
if FIND == True:
print('阶梯数是:', steps)
else:
print('在程序限定的范围内找不到答案!') 鱼油的问题在于循环中更新 `steps` 的方式不正确。原代码使用 `steps = 7 * (i + 1)` 是正确的,因为它按顺序枚举 7 的倍数(7, 14, 21, ...)。但若改为 `steps = steps * (i + 1)` 会导致值指数级增长(7 → 14 → 42 → 168 → ...),跳过中间的解(如 119)。
### 错误原因分析
假设使用 `steps = steps * (i + 1)`:
1. 初始:`steps=7`, `i=1`
2. 第一次循环:不满足条件 → `steps = 7 * (1+1) = 14`, `i=2`
3. 第二次循环:不满足条件 → `steps = 14 * (2+1) = 42`, `i=3`
4. 第三次循环:不满足条件 → `steps = 42 * (3+1) = 168`, `i=4`
此时跳过 21、28、35 等值,包括正确解 119。
### 正确写法推荐
使用线性增长(每次加 7)更直观:
steps = 7
i = 1
FIND = False
while i < 100:
if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
FIND = True
break
else:
steps += 7# 每次增加 7,确保枚举所有 7 的倍数
i += 1
if FIND:
print('阶梯数是:', steps)
else:
print('在程序限定的范围内找不到答案!')
### 为什么原代码的 `steps = 7 * (i+1)` 正确?
- 它等价于枚举 `i+1` 的 7 倍:
`i=1` → `steps=7*2=14`
`i=2` → `steps=7*3=21`
...
`i=17` → `steps=7*18=126`(实际需 `119=7*17`,但注意初始 `steps=7` 对应 `i=1` 时已检查过 7)
- 最终在 `i=17` 时找到 `steps=119`(因为 `119=7*17`,而循环中 `i=17` 时 `steps=7*(17+1)=126`?需调整初始值逻辑)
### 更简洁的写法(推荐)
# 直接枚举 7 的倍数(7 到 700)
for steps in range(7, 700, 7):# 从 7 开始,步长为 7
if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
print('阶梯数是:', steps)
break
else:# 循环正常结束(未 break)时执行
print('在程序限定的范围内找不到答案!')
### 关键点
- 错误写法 `steps = steps * (i+1)` 破坏了枚举的线性顺序。
- 正确做法是确保每次增加固定步长 7。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]