添加具有迭代用户输入的列表,然后将列表索引添加到一起

时间:2016-02-21 23:23:09

标签: python python-3.x

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)

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

一些问题: 1.输入10次5次导致1010101010而不是50次 2.我无法确定可伸缩性 - 用户不必将用户限制为X个输入,因此如果他们愿意,他们可以输入3个数字或999个,但我怎么能循环添加所有索引值 - 例如,它遍历列表添加所有值,迭代的次数将由NumberOfNumbers决定,而不是执行index0 + index1 + index2等?显然这是非常不切实际和低效的,并且不会超出我要添加的程序的索引值的数量。 3.有点与此无关,但我试图弄清楚这一点时遇到了..我不确定X在&#34;而在变量&#34;确实

4 个答案:

答案 0 :(得分:1)

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

NumbersToBeAdded.append(int(Number))

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

total = sum(NumbersToBeAdded)

答案 1 :(得分:0)

使用module TimeZoneColumns extend ActiveSupport::Concern class_methods do # @columns A list of columns for which the timezone should be set def timezone_columns(*columns) self.columns_to_timezone = columns end end included do after_initialize :set_timezone class << self; attr_accessor :columns_to_timezone end end def set_timezone return unless whiteflagged_columns = self.class.columns_to_timezone is_blank = whiteflagged_columns.empty? attributes.each_pair do |column, value| if is_blank or whiteflagged_columns.include?(column.to_sym) if value.is_a?(Time) and not value.is_a?(ActiveSupport::TimeWithZone) send("#{column}=", value.in_time_zone(Rails.application.config.time_zone)) end end end end end - 循环结合for代替range()循环,您可以使代码更具通用性。 此外,可以使用while来总结数字列表。

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

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)) - 块,以便在输入失败的情况下转换输入并处理异常。

答案 2 :(得分:0)

input返回一个字符串。这就是为什么你得到"1010101010",这是五个"10"连接的,而不是5 10的总和。使用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

答案 3 :(得分:0)

内置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)))