HT_prandme 发表于 2026-1-18 16:39:43

萌新打卡:零基础入门学习Python(最新版),第11讲课后编程作业答案分享交流

一种不同于版主答案的新答案,尽管非常相似,但是是我一点点摸出来的{:10_254:}
感觉还挺简洁的(因为没用类似于steps之类的字符来表示,以后尽量用英文表示{:10_266:} )
版权问题,就不附上题目图片啦{:10_324:}

x = 0
y = int(input("请设定搜索范围:"))
z = False#用以检验
while x < y:#设定范围y
    if x % 2 == 1 and x % 3 == 2 and x % 5 == 4 and x % 6 == 5 and x % 7 == 0:
      print(x)
      z = True
      break
    else :
      x += 1
if z:
    print(z)
else:
    print("范围内无此数")


每天发发,水一水贴awa

FishC 发表于 2026-1-18 16:40:30

首先,感谢你分享自己的代码!作为新手,能够独立摸索出解决方案是非常棒的进步。你的代码逻辑基本正确,能够在一定范围内搜索满足条件的数。这里有一些小建议可以帮助代码更加清晰和规范。

### 代码分析
你的代码使用 while 循环遍历范围,并通过布尔变量 z 来检查是否找到目标数。不过,在找到数后,你打印了 x 和 z,这会导致输出类似 119 和 True 的两行,可能不是最理想的。通常我们只需打印找到的数即可。

### 改进建议
1. **变量命名**:使用英文命名可以提高代码可读性,例如用 upper_limit 代替 y,用 found 代替 z。
2. **循环结构**:使用 for 循环可以简化代码,避免手动管理计数器。
3. **输出清晰化**:找到数时打印明确的消息,未找到时给出提示。

以下是调整后的代码示例:


upper_limit = int(input("请设定搜索范围: "))
found = False

for num in range(upper_limit):
    if num % 2 == 1 and num % 3 == 2 and num % 5 == 4 and num % 6 == 5 and num % 7 == 0:
      print(f"找到满足条件的数: {num}")
      found = True
      break

if not found:
    print("范围内无此数")


### 说明
- 这段代码从 0 开始搜索到 upper_limit - 1,符合你原代码的逻辑。如果希望从 1 开始,可以将 range(upper_limit) 改为 range(1, upper_limit)。
- 条件部分保留了所有检查,确保与题目要求一致。实际上,num % 6 == 5 已经隐含了 num % 2 == 1 和 num % 3 == 2,但为了清晰,你可以根据需求决定是否简化。

继续加油,期待看到你更多的分享!如果有其他问题,随时交流。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

HT_prandme 发表于 2026-1-18 16:40:49

看着虽然简洁,但是相对比版主的代码,这个运算量可能更大一点{:10_266:}

FishC 发表于 2026-1-18 16:41:42

HT_prandme 发表于 2026-01-18 16:40
看着虽然简洁,但是相对比版主的代码,这个运算量可能 ...

你说得对!从运算效率的角度看,直接遍历所有数字确实计算量更大。让我们来比较一下不同方法的思路:

### 两种思路对比

**你的方法(遍历法)**:
for num in range(upper_limit):
    if num % 2 == 1 and num % 3 == 2 and num % 5 == 4 and num % 6 == 5 and num % 7 == 0:

* 优点:思路直接,容易理解
* 缺点:每个数字都要进行5次求余运算,计算量大

**优化方法(数学法)**:
for i in range(7, upper_limit, 7):
    if i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5:

* 优点:只检查7的倍数,减少了检查范围
* 解释:因为题目要求 x % 7 == 0,所以可以直接从7开始,每次增加7

### 进一步优化

其实还有更优的数学方法,观察条件可以发现:
1. x % 2 == 1 说明 x 是奇数
2. x % 6 == 5 已经包含了 x % 2 == 1 和 x % 3 == 2
3. 所以条件可以简化为:x % 5 == 4、x % 6 == 5、x % 7 == 0

最精简的数学推导是:x+1 是 2,3,5,6 的公倍数,也就是30的倍数,同时 x 是7的倍数。所以:
for k in range(1, upper_limit // 30 + 2):
    x = 30 * k - 1
    if x <= upper_limit and x % 7 == 0:
      print(f"找到满足条件的数: {x}")
      break

这种方法只需要检查大约 upper_limit/30 次,比你的方法快30倍!

### 实际测试

假设搜索范围是1000:
* 你的方法:检查1000次
* 优化方法1(只查7的倍数):检查约143次
* 优化方法2(数学推导):检查约33次

不过别灰心!作为初学者,你的代码已经很棒了。先写出能解决问题的代码,再考虑优化,这是完全正确的学习路径。随着学习的深入,你自然会掌握更多优化技巧。

继续保持这份探索精神,期待看到你更多的进步!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

HT_prandme 发表于 2026-1-18 16:41:54

FishC 发表于 2026-1-18 16:40
首先,感谢你分享自己的代码!作为新手,能够独立摸索出解决方案是非常棒的进步。你的代码逻辑基本正确,能 ...

哎呀,代码忘改了{:10_266:}

FishC 发表于 2026-1-18 16:44:38

HT_prandme 发表于 2026-01-18 16:41
FishC 发表于 2026-1-18 16:40
首先,感谢你分享自己 ...

首先,为你的探索精神点赞!能够独立思考并实现代码,这是学习编程最宝贵的一步。

关于你提到的运算量问题,确实值得探讨。让我们从数学角度来优化这个搜索问题:

### 数学优化思路
题目要求找到一个数 x,满足:
1. x % 2 == 1
2. x % 3 == 2
3. x % 5 == 4
4. x % 6 == 5
5. x % 7 == 0

仔细观察,条件 4(x % 6 == 5)已经隐含了条件 1 和 2,因为一个数除以 6 余 5,它一定是奇数(满足条件1),且除以 3 余 2(满足条件2)。所以我们可以简化条件为:

* x % 5 == 4
* x % 6 == 5
* x % 7 == 0

### 高效搜索方法
由于 x 必须是 7 的倍数,我们可以只遍历 7 的倍数,这样搜索范围减少到原来的 1/7:

upper_limit = int(input("请设定搜索范围: "))
found = False

for num in range(7, upper_limit, 7):
    if num % 5 == 4 and num % 6 == 5:
      print(f"找到满足条件的数: {num}")
      found = True
      break

if not found:
    print("范围内无此数")

### 更进一步的数学推导
其实,我们还可以利用同余方程组来直接求解。
由 x % 5 == 4 和 x % 6 == 5,可以推出 x + 1 同时是 5 和 6 的倍数,即 x + 1 是 30 的倍数。
设 x + 1 = 30k(k 为正整数),则 x = 30k - 1。
又因为 x 是 7 的倍数,即 30k - 1 ≡ 0 (mod 7),化简得 30k ≡ 1 (mod 7),30 mod 7 = 2,所以 2k ≡ 1 (mod 7),解得 k ≡ 4 (mod 7)。
因此 k = 7m + 4,代入得 x = 30*(7m+4) - 1 = 210m + 119。
所以最小解是 119,之后每次加 210 都是解。

这样我们可以直接输出所有解,无需遍历:

upper_limit = int(input("请设定搜索范围: "))
start = 119
if start < upper_limit:
    for x in range(start, upper_limit, 210):
      print(x)
else:
    print("范围内无此数")

### 总结
你的原始代码已经正确,通过数学分析可以大幅提升效率。编程不仅是写代码,更是思考如何更优雅地解决问题。继续保持这种探索精神,你会进步更快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 萌新打卡:零基础入门学习Python(最新版),第11讲课后编程作业答案分享交流