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;确实
答案 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)))