【问题标题】:Traceback error and "argument of type 'int' is not iterable" when trying to use while loop尝试使用 while 循环时出现回溯错误和“'int' 类型的参数不可迭代”
【发布时间】:2020-06-14 20:49:41
【问题描述】:

我正在尝试编写我的第一个程序,一个 collat​​z sequense 程序。代码是

input_siffra = input("Input an integer: ")
startsiffra = int(input_siffra)

def Collatz(collatz_number):
    position = (len(str(collatz_number)) - 1)
    if position in collatz_number in (0, 2, 4, 6, 8):
        return (collatz_number / 2)
    else:
        return (collatz_number * 3 + 1)

while startsiffra != 1:
    print(startsiffra)
    Collatz(startsiffra)

我在这里尝试做的是找到一种方法来判断我输入的数字是偶数还是奇数(是的,我知道有 %2 方法,但我故意不在这里使用它来学习)通过查看所述数字中的最后一个数字,然后如果它是偶数或奇数,则执行两件事之一。运行它会给我两个错误,首先是 Collat​​z(startsiffra) 的回溯,以及检查最后一个数字是否在列表中的行的 int 错误。

【问题讨论】:

  • 这行应该是什么意思:if position in collatz_number in (0, 2, 4, 6, 8):?
  • 它应该检查数字中的最后一位是否是偶数
  • position in collatz_number in (0, 2, 4, 6, 8) 实际上是(position in collatz_number) and (collatz_number in (0, 2, 4, 6, 8)) 的简写。十进制数的最后一位是除以 10 后的余数,即number % 10

标签: python int collatz


【解决方案1】:
input_siffra = input("Input an integer: ")
startsiffra = int(input_siffra)

def Collatz(collatz_number):
    position = (len(str(collatz_number)) - 1)
    if collatz_number%10 in (0, 2, 4, 6, 8):
        return (collatz_number / 2)
    else:
        return (collatz_number * 3 + 1)

while startsiffra != 1:
    print(startsiffra)
    startsiffra=Collatz(startsiffra)

这似乎如您所愿。希望我有所帮助

编辑:你也可以使用这个 if 而不是我在代码中输入的那个。这是您在代码中尝试做的事情(不使用 %)

if str(collatz_number)[position] in ('0', '2', '4', '6', '8'):

【讨论】:

  • 这行得通,但如果我使用您添加的代码作为编辑(不使用 %),程序将继续运行,而不是永恒
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多