鱼C论坛

 找回密码
 立即注册
查看: 1547|回复: 3

水仙花问题

[复制链接]
发表于 2023-11-16 20:57:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
for a in range(100,1000):
    b = range(10)
    c = range(10)
    d = range(10)
    while "a" == "b" + "c" +"d":
        if a == b**3 + c**3 + d**3:
            print(a, "是一个水仙花数。")
是鲜花问题,我觉得代码写的没错呀,为什么不报错,但是不运行呢?

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-16 20:57:39 | 显示全部楼层
问题出在代码中的几个地方。首先, b = range(10) 会创建一个范围对象,而不是一个数字列表。其次, while "a" == "b" + "c" +"d": 中的条件永远为假,因为它在比较字符串"a"和字符串"bcd"。最后, if a == b**3 + c**3 + d**3: 中的 b**3 、 c**3 和 d**3 也会引发错误,因为 b 、 c 和 d 都是范围对象,而不是单个数字。

以下是修复后的代码:
for a in range(100, 1000):
    b = a // 100  # 获取百位数
    c = (a // 10) % 10  # 获取十位数
    d = a % 10  # 获取个位数
    if a == b**3 + c**3 + d**3:
        print(a, "是一个水仙花数。")

这段代码将每个三位数拆分成百位数、十位数和个位数,并检查是否为水仙花数。修复后的代码应该能够正确运行并输出水仙花数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-16 20:58:38 | 显示全部楼层
非代码部分:

感谢你提供的代码。我发现了几个问题导致代码无法正常运行:

1. 在你的代码中,变量bcd被赋值为range(10),这实际上是一个迭代器对象,并不是你想要的从0到9的整数范围。你需要将它们转换成列表,可以使用list(range(10))来生成一个包含0到9的列表。

2. 在while "a" == "b" + "c" + "d":这行代码中,你使用了字符串比较的方式进行条件判断。然而,你想要的是判断变量a是否等于变量bcd的立方和。因此,你应该使用变量名,而不是字符串。正确的写法应该是while a == b + c + d:

3. 在[b]if a == b3 + c3 + d**3:[/b]这行代码中,你试图计算变量bcd的立方。然而,bcd都是列表,不能直接进行乘方运算。你需要遍历列表中的每个元素,并将其转换为整数后再进行乘方运算。

4. 缩进问题:你的代码缺少正确的缩进,导致程序无法正常运行。在whileif语句后面的代码块应该有正确的缩进,例如使用四个空格或一个制表符。

请根据以上建议对你的代码进行修改,然后再尝试运行。如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-11-18 16:00:27 | 显示全部楼层
按照你的思路修改代码:
for a in range(100,1000):
    for b in range(10):
        for c in range(10):
            for d in range(10):
                if a == b**3 + c**3 + d**3 and str(a) == str(b) + str(c) + str(d):
                    print(a, "是一个水仙花数。")
但是强烈不建议这么写,因为嵌套循环太多,程序效率低下

总结你出现的问题:
1."b"、"c"、"d"都是字符串,通常引号里面就是字面的意义,用 + 拼接起来就是“bcd”
想让b、c、d三个变量由数字转为字符串应用str()
2.range()返回的是一个可迭代对象,可以搭配for循环。

优化的代码:
for i in range(100,1000):
    if i == (i//100)**3 +(i//10 %10)**3 + (i%10)**3: #判断该数字是否等于三项立方和
        print(i,"是一个水仙花数。")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表