xy-xuan 发表于 2023-7-27 16:07:57

求助大佬们,程序没有报错但是运行不出来是什么原因?程序如下

for i in range(100,999):
    x = int(i * 0.01)
    y = i*0.1 - (int(i*0.1))
    z = i % 10
    if x**3 + y**3 + z**3 == i:
      print(i)
   

isdkz 发表于 2023-7-27 16:08:12

你好!根据您提供的程序,我注意到您想找出满足以下条件的三位数:

1. 三位数的百位数的立方 + 十位数的立方 + 个位数的立方 等于 该三位数本身。

您的程序看起来基本上是正确的,但可能存在一个小问题,导致没有输出结果。问题在于变量y的计算可能会导致小数部分不精确,从而影响最终的判断条件。在Python中,浮点数的精度有时会受到限制,因此我们需要避免使用浮点数的精确比较。

为了解决这个问题,我建议您对计算y的部分进行修改,使用整数计算而不是浮点数计算。具体来说,您可以将y的计算改成以下方式:

y = i // 10 - (i // 100 * 10)


这样可以确保y是一个整数,避免了浮点数的精度问题。修改后的程序如下所示:

for i in range(100, 999):
    x = i // 100
    y = i // 10 - (i // 100 * 10)
    z = i % 10
    if x 3 + y 3 + z ** 3 == i:
      print(i)


现在,重新运行这个修改后的程序,它应该能够正确地找出满足条件的三位数并输出。希望这能解决您的问题!如果您有任何其他疑问,请随时问我。

陶远航 发表于 2023-7-27 16:11:10

你的代码逻辑上没有问题,并且没有报错,但是程序没有输出结果的原因是由于浮点数运算可能会引起精度问题,从而导致条件不满足,结果没有输出。

在你的代码中,涉及到浮点数的运算:x = int(i * 0.01)和y = i*0.1 - (int(i*0.1))。由于计算机内部对浮点数的存储和表示存在一定的误差,可能导致计算结果和预期的结果有微小的差异。

为了解决这个问题,你可以考虑使用整数运算来代替浮点数运算。在这个例子中,可以将x和y改为以下形式:
x = i // 100
y = (i // 10) % 10
这样就能保证整数除法的准确性,并且避免了浮点数误差。修改后的代码如下:
for i in range(100, 999):
    x = i // 100
    y = (i // 10) % 10
    z = i % 10
    if x**3 + y**3 + z**3 == i:
      print(i)
运行这段代码,你应该能够得到正确的输出结果。
页: [1]
查看完整版本: 求助大佬们,程序没有报错但是运行不出来是什么原因?程序如下