【问题标题】:Appending a list with iterating user input then adding list index's together使用迭代用户输入附加列表,然后将列表索引添加在一起
【发布时间】:2016-02-22 07:50:35
【问题描述】:
NumberOfNumbers = int(input("CHoose up to 5 numbers to add together"))
NumbersToBeAdded = []


while len(NumbersToBeAdded) < NumberOfNumbers:
    Number = input("What number would you like to add?")
    NumbersToBeAdded.append(Number)
total = NumbersToBeAdded[0] + NumbersToBeAdded[1] + NumbersToBeAdded[2] + NumbersToBeAdded[3] + NumbersToBeAdded[4]
print(total)

我试图让用户输入他们要加在一起的数字,然后询问他们要加在一起的数字 - 例如,输入的 4 个数字将循环 4 个输入并将它们添加到列表中 (NumbersToBeAdded)。然后该列表将获取每个索引值并将它们加在一起。

几个问题: 1. 输入 10 五次得到 1010101010 而不是 50 2. 我无法确定可伸缩性 - id 宁愿让用户不被限制为 X 个输入,所以如果他们愿意,他们可以输入 3 个数字或 999,但是我如何循环将所有索引值的相加在一起 ​​-例如,它遍历列表,将所有值加起来,它的迭代次数将由 NumberOfNumbers 决定,而不是执行 index0 + index1 + index2 等?显然,这是非常不切实际和低效的,并且不会超出我计划添加的索引值的数量。 3. 与此无关,但我在试图弄清楚这一点时遇到了。我不确定“while X in Variable”中的 X 是做什么的。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    至于您的第一个问题,您需要在将输入值添加到列表之前将其转换为整数:

    NumbersToBeAdded.append(int(Number))
    

    其次,您可以使用sum 对添加到列表中的所有数字求和,而不是像NumbersToBeAdded[0] + NumbersToBeAdded[1] + ... 这样写:

    total = sum(NumbersToBeAdded)
    

    【讨论】:

      【解决方案2】:

      您可以将for-loop 与range() 结合使用,而不是while-loop,让您的代码更加通用。 此外,可以使用sum() 来汇总数字列表。

      因此改进代码并将所有输入转换为整数,我建议如下:

      NumberOfNumbers = int(input("How many numbers do you want to type in? "))
      NumbersToBeAdded = []
      
      for i in range(0, NumberOfNumbers):
          Number = int(input("What number would you like to add? "))
          NumbersToBeAdded.append(Number)
      
      total = sum(NumbersToBeAdded)
      
      print('The sum is: {}'.format(total))
      

      但是,您应该考虑如果用户输入无法转换为整数的内容会发生什么,因此目前这会引发异常。 为此,我建议查看所谓的 try-except-blocks 以便转换输入并在失败时处理异常。

      【讨论】:

        【解决方案3】:

        内置的sum 在这些情况下非常方便:

        # First tip: you're not using a good naming convention. Do not use PascalCase for variables
        how_many = int(input("Choose up to 5 numbers to add together:"))
        num = []
        
        # Much cleaner and readable, isn't it?
        for _ in range(how_many):
            num.append(int(input("What number would you like to add?")))
        
        print('The sum is: {}'.format(sum(num)))
        

        【讨论】:

          【解决方案4】:

          input 返回一个字符串。这就是为什么你得到"1010101010",它是五个"10"s 的连接,而不是5 个10s 的总和。使用int 转换为整数,就像您在第一行中所做的那样。

          此外,列表也不是必需的。您可以只保留一个运行总和,如下所示:

          number_of_numbers = int(input("How many numbers do you want to type in? "))
          
          total = 0
          for _ in range(number_of_numbers):
              total += int(input("What number would you like to add? "))
          print(total)
          

          如果您想让您的用户输入固定数量的数字,for 循环是合适的(如上所示)。 while 非常适合让用户输入任意数量的数字,直到某个输入(例如,非数字)。下面的程序让用户继续输入整数,直到他输入无法转换为整数的内容,然后打印出总和:

          total = 0
          while True:
              try:
                  total += int(input('Enter a number to be added > '))
              except ValueError:
                  # when the input cannot be converted to a int
                  break
          print(total)
          

          如果你不熟悉try-except,可以learn about them

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-11
            • 1970-01-01
            • 1970-01-01
            • 2019-04-12
            • 2020-01-09
            • 2021-09-07
            • 2017-12-23
            • 2014-09-06
            相关资源
            最近更新 更多