【问题标题】:My for loop isn't working我的 for 循环不起作用
【发布时间】:2016-04-27 18:02:39
【问题描述】:
  • 我编写的程序旨在获取用户输入,它是一个整数,然后将其乘以 1-10 的范围,因此用户输入 x 1-10。但是,当我运行我的程序时,会出现一个错误,说'bool'不可迭代.. 我是编码新手,所以请放轻松

    这是我的代码:

    这是错误:

  • 回溯(最后一次调用): 文件“”,第 1 行,在 环形() 文件“C:/Users/chemg/AppData/Local/Programs/Python/Python35-32/loop1.py”,第 6 行,循环中 对于范围内的数字(1,10): TypeError: 'bool' 对象不可迭代

  • 用户输入值后出现此错误

【问题讨论】:

    标签: python function for-loop input


    【解决方案1】:

    让我们打破这条线

    for numbers in number in range(1,10):
    
    range(1,10) => 1..10
    number in range(1,10) => True/False, but what is 'number'? 0? So, 'False'
    numbers in number in range(1,10) => Error!!! There are no 'numbers' in 'False'
    

    也许你打算这样做?

    for number in range(1,10):
        # do something
    

    您稍后在尝试打印 4 个内容时也会遇到错误,但在 format() 中仅指定了 3 个。

    print("Here it is {0}:\n {1} x {2} = {3}".format(number,add,name))
    

    你把name 写成{2},这样就会打印出类似的东西

    Here it is 1: 7 x James = ??
    

    所以,你可以解决这个问题

    add=int(input("Enter number and i will display the times table: "))
    for number in range(1,10):
        print("{0} x {1} = {2}".format(add, number, add*number))
    

    【讨论】:

    • @erip 好吧,是的 :) 但是,number = 0 从来不需要。
    • @circket_007 这行得通,但不是我想要的方式。它似乎是从 7 乘以 1 然后 7 乘以 2 开始的,然后它是 14 乘以 3 然后 42 乘以 4?
    • @JamesW 那是因为这就是你告诉它要做的事情。 add= add*number.
    • @erip 肯定会是 7x1、7x2、7x3 等?
    • 跟踪您的 add 变量。你每次都在改变它。
    【解决方案2】:

    您也可能不想将乘法的结果存储到“add”中,因为对于循环的每次迭代,“add”将是前一次迭代的值,而不是用户输入的值产生一个乘法表。实际上,以下所有结果都将为 0:

    for number in range(10):
        print('{0} * {1}'.format(add, number))
        add = add*number
        print("Result:{0}".format(add))
    

    在您的 cli 中使用 range(1,10) 进行测试,就像您最初在代码中所做的那样,它以 1 而不是 0 开头,您会看到结果不是乘法表:

    for number in range(1,10):
        print('{0} * {1}'.format(add, number))
        add = add * number
        print(add)
    

    这是一个包含所有更改的完整版本:

    def loop():
        name=input("Enter name: ").capitalize()
        print("Hey {0}".format(name))
        add=int(input("Enter number and i will display the times table: "))
        for number in range(1,10):
            product = add * number
            print("Here it is {0}:\n {1} x {2} = {3}".format(name,add,number,product))
    

    【讨论】:

      【解决方案3】:

      在您的 for 循环中,编号是单个变量,不是可迭代的,并且是无效语法,因此请用下面的代码替换您的代码 不用写number=0,

      def loop():
          name=input("Enter name: ").capitalize()
          print("Hey {0}".format(name))
          add=int(input("Enter number and i will display the times table: "))
          for number in range(1,11): # last value is not included so to iterate up to 10 write 11
              product= add*number
              print(" {1} x {2} = {3} \n ".format(number,add,product))
      

      【讨论】:

        【解决方案4】:
        • 好吧,我似乎已经做到了。这可能是答案的内容,但这是我想出的

          def loop():
              numbers=int(input("Enter a number: "))
              add=numbers
              for number in range(1,900000000000):
                  numbers= add*number
                  print("{0} x {2} = {1}".format(add,numbers,number))
          

        【讨论】:

          【解决方案5】:

          number in range(1,10) 被评估为 False(因为 0 不在 range(1,10) 中,所以 for numbers in False 会导致问题。

          你可能只想要for number in range(1,10):

          【讨论】:

            猜你喜欢
            • 2018-06-12
            • 2015-10-18
            • 1970-01-01
            • 2017-04-13
            • 2013-12-31
            • 2018-08-21
            • 2018-04-22
            • 2016-05-13
            • 2018-09-09
            相关资源
            最近更新 更多