我的任务是编写一个脚本,让用户输入一个数字列表,并让脚本在该列表中添加每个数字以获得总和。我能够编写脚本,但是当我输入一个多于一位的整数时,我遇到了麻烦。这是我的代码和工作脚本:
#!/usr/bin/python
#Sum of integers in a list
#Takes input and removes non-number characters
nList = input("please enter a list of integers separated by commas:\n")
n = ""
numList1 = list(n.join((i) for i in nList if i.isalnum())) #Converts into list of Strings
numList = list(map(int, numList1))#Converts list of strings into a list of integers
print(numList) #prints the numList
#Takes list and adds all the numbers together
def sumArg(numList):
nSum= map(int, numList) #converts list into individual integers
numSum = sum(i for i in nSum) #adds the integers together
print(numSum)#prints the sum
sumArg(numList) #runs script
当我运行脚本并输入(1,2,3,4,5,6,7,8,9)时,它会打印出来
[1, 2, 3, 4, 5, 6, 7, 8, 9]
45
但是当我将数字10添加到列表的末尾时,我将其作为输出
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0]
46
我知道数字1到10的总和等于55,而不是46。有没有办法让我编写这个脚本而不用Python将10转为1,0。我希望能够让用户输入任何类型的整数,并打印出正确的总和。
答案 0 :(得分:2)
你不应该将逗号分隔的字符串转换成这样的整数。特别是你的算法通过删除所有逗号来启动进程,这使得无法从下一个数字中分辨出一个数字。
相反,使用str.split()
简单地将字符串拆分为给定分隔符上的list
:
nList = input("please enter a list of integers separated by commas:\n")
nList = map(int, nList.split(','))
此外,您可以使用内置的sum()
函数找到此map
对象的总和(无需将其转换为list
):
total = sum(nList)
答案 1 :(得分:0)
str.split()
。return
代替print
是一个好主意。nList = input("please enter a list of integers separated by commas:\n")
numList = nList.split(',')
def sumArg(numList):
nSum= map(int, numList)
numSum = sum(nSum)
return numSum
print(numList)
print(sumArg(numList))
演示:
please enter a list of integers separated by commas:
1,2,3,4,5,6,7,8,9,10,120
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '120']
175
答案 2 :(得分:0)
以下是您更正后的代码:
nList = input("please enter a list of integers separated by commas:\n")
# Converts into list of Strings
numList1 = nList.split(',')
print(numList1)
numList = list(map(int, numList1))
print(numList)
def sumArg(numList):
print(sum(numList))
sumArg(numList) # runs script
问题是你的numList1 = list(n.join((i) for i in nList if i.isalnum()))
正在扫描每个角色。我上面发布的代码将数组拆分为每个逗号,将数字转换为整数并将它们相加。
答案 3 :(得分:0)
nList = input("please enter a list of integers separated by commas:\n")
nList
是一个字符串,字符串是字符序列
(i) for i in nList
在这里,您将遍历处理每个字符的字符串。你将每个字符分开,这就是“10”变为“1”和“0”的原因。
由于您输入的每个数字都以逗号分隔,请尝试在逗号上拆分。
numList1 = nList.split(",")
如果输入也被括号括起来,那么在转换为int之前你需要删除它们。
答案 4 :(得分:0)
实际上,如果您使用的是Python 2,那么您的脚本可以归结为:
nList = input("please enter a list of integers separated by commas:\n")
print sum(nList)
这是因为Python 2中的input
已经将字符串的输入转换为整数列表。
如果要将字符串作为输入,然后将其转换为整数列表,则可以使用raw_input
(或Python 3中的input
):
inputStr = raw_input("please enter a list of integers separated by commas:\n")
listOfStrs = inputStr.split(",")
listOfInts = map(int, listOfStrs)
print sum(listOfInts)
这需要像1, 2, 3, 4, 5, 6, 7, 8, 9, 10
这样的输入(没有括号)。