You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环作业求助:寻找等于自身各位乘积两倍的两位数

问题描述

这个问题本身难度不高,只是表述方式容易造成混淆。我已经尝试了3种解决方案,全部没有通过校验。我已经付出了实际努力,因此希望能得到大家的帮助,问题详情如下:

使用for循环编写对应程序:逐列输出所有满足「数值本身等于组成该数的各位数字的乘积的两倍」的两位数。

以下是我目前已经尝试过的3种解决方案:

  • 方案1
num = int(input("Enter a two-digit number: "))
digitArr = []

for i in str(num):
    digitArr.append(i)

result = 1

for j in digitArr:
    result = result * int(j)
result = result ** 2 #here

for i in range(10, 100):
    tempDigitArr = []
    for j in str(i):
        tempDigitArr.append(j)
    tempResult = 1
    for k in tempDigitArr:
        tempResult = tempResult * int(k)
    tempResult = tempResult ** 2 #here
    if tempResult == result:
        print(i)
        tempResult = 1
        continue
    else:
        tempResult = 1
        continue
  • 方案2
num = int(input("Enter a two-digit number: "))
digitArr = []

for i in str(num):
    digitArr.append(i)

result = 1

for j in digitArr:
    result = result * int(j)
result = result ** 2 #here

for i in range(10, 100):
    tempDigitArr = []
    for j in str(i):
        tempDigitArr.append(j)
    tempResult = 1
    for k in tempDigitArr:
        tempResult = tempResult * int(k)
    tempResult = tempResult ** 2 #here
    if tempResult == result:
        print(i)
        tempResult = 1
        continue
    else:
        tempResult = 1
        continue
  • 方案3
num = int(input("Enter a two-digit number: "))
digitArr = []

for i in str(num):
    digitArr.append(i)

result = 1

for j in digitArr:
    result = result * int(j)

for i in range(10, 100):
    tempDigitArr = []
    for j in str(i):
        tempDigitArr.append(j)
    tempResult = 1
    for k in tempDigitArr:
        tempResult = tempResult * int(k)
    if tempResult == result:
        print(i)
        tempResult = 1
        continue
    else:
        tempResult = 1
        continue

补充说明:我所学的这门课程使用自动校验系统批改作业 ;-;


错误分析与正确实现

现有代码核心问题

  1. 冗余输入逻辑:题目要求遍历所有两位数筛选符合条件的结果,不需要用户额外输入数值,输入步骤会直接导致自动校验失败。
  2. 运算逻辑错误:前两份代码将「乘积的两倍」错误实现为「乘积的平方」,**2是平方运算,两倍应该用*2。
  3. 判断逻辑错误:所有代码都以输入数值的各位乘积为比对基准,而非判断当前遍历的两位数是否满足「自身值 = 自身各位数字乘积 * 2」的要求。
  4. 冗余代码:不需要额外数组存储各位数字,也不需要多余的continue和临时变量重置逻辑。

正确代码

# 遍历所有两位数
for num in range(10, 100):
    # 拆分十位、个位数字
    tens = num // 10
    units = num % 10
    # 计算各位乘积的两倍
    target = (tens * units) * 2
    # 符合条件就输出
    if num == target:
        print(num)

输出结果

运行后逐列输出符合条件的两位数:

12
24
36
48

内容的提问来源于stack exchange,提问作者Husayn Gokal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:27:00