如何将用户的号码添加到列表中
How to add the Numbers from the User into a List
我一直在尝试编写一个均值、中值和众数计算器。我有两个问题。 1)我如何将用户输入的数字添加到空列表中。如果我简单地输入数字,它会给我这个错误:
userNumbers = int(raw_input("Enter the digits here: "))
ValueError: invalid literal for int() with base 10: '2, 4, 6, 8'
我很想知道如何避免这种情况。
其次,我正在使用 Python 2.7.10,很快就会升级到 3.4。我知道在 3.4 上有一个名为 statistics 的模块,它具有中值函数,但它在 2.7.10 上不起作用。出于好奇,如果没有该函数,我将如何找到中位数。谢谢大家!
from collections import Counter
def numberPlacement():
print("Welcome to the PyCalculator, please enter a series of digits!")
userNumbers = int(raw_input("Enter the digits here: "))
userNumbers = []
def userChoice():
while True:
print("Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)")
userAnswer = raw_input("Enter your choice here: ")
if userAnswer == "Mean":
mean = sum(userNumbers) / float(len(userNumbers))
return mean
elif userAnswer == "Mode":
mode = Counter(userNumbers)
return mode
continue
print numberPlacement()
print userChoice()
您需要拆分输入:
a = raw_input("Enter the digits here: ").split(',')
b = [int(x) for x in a]
然后你就可以参考你的号码了。
您收到的错误是因为您试图将无效字符转换为 int。
您的输入是:1, 2, 3, 4
所以这些逗号是导致该错误的原因。
要纠正这个问题,只需删除您拥有的 int() 强制转换,通过在您的输入中附加 .split(',')
使您的输入成为一个列表。 split 所做的是通过在逗号上拆分将您的字符串转换为列表。这样你就会得到一个由字符串表示的数字列表。
因此,由于您是在做数学运算,因此需要确保您实际使用的是数字表示形式,而不是列表中数据的字符串表示形式。通过使用 Python 的 map
方法 (documentation),您可以使用一种简洁的单行解决方案,将您的所有条目转换为一个 int。
因此,您的用户输入可以简单地如下所示:
Python 3:
userNumbers = list(map(int, input("Enter the digits here: ").split(',')))
Python 2:
userNumbers = map(int, raw_input("Enter the digits here: ").split(','))
您的代码中还有另一个问题。在您的 userChoice 方法中,您引用了 userNumbers
。我认为这是 numberPlacement
方法中对 userNumbers
的引用。你不能这样做。
我建议您做的是让您的 userChoice 方法采用一个参数,该参数将是一个名为 userNumber 的列表,因为您似乎想分别调用这两个方法。很简单:
def userChoice(userNumbers):
# the rest of your code
现在,请务必记住,userChoice
方法中的 userNumbers
与 numberPlacement
方法中的 userNumbers
不同。要了解原因,这是范围界定的一部分。您可以阅读有关 here.
的内容
那么,当你现在调用你的方法时,你只需要做这样的事情:
number_placements = numberPlacement()
print(number_placements)
print(userChoice(number_placements))
当你把它们放在一起时,你的代码现在看起来像这样:
(Python 2)
from collections import Counter
def numberPlacement():
print("Welcome to the PyCalculator, please enter a series of digits!")
userNumbers = map(int, raw_input("Enter the digits here: ").split(','))
return userNumbers
def userChoice(userNumbers):
while True:
print("Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)")
userAnswer = raw_input("Enter your choice here: ")
if userAnswer == "Mean":
mean = sum(userNumbers) / float(len(userNumbers))
return mean
elif userAnswer == "Mode":
mode = Counter(userNumbers)
return mode
continue
r = numberPlacement()
print(userChoice(r))
演示:
Welcome to the PyCalculator, please enter a series of digits!
Enter the digits here: 1,2,3,4
Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)
Enter your choice here: Mode
Counter({1: 1, 2: 1, 3: 1, 4: 1})
您正在打印不需要打印的随机内容,并且您还拥有试图在全局范围内调用的局部范围变量
def numberPlacement():
print("Welcome to the PyCalculator, please enter a series of digits, comma seperated!")
userNumbers = raw_input("Enter the digits here: ")
return [ int(u.strip()) for u in userNumbers.split(',') ]
def userChoice(userNumbers):
print("Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)")
userAnswer = raw_input("Enter your choice here: ")
if userAnswer == "Mean":
mean = sum(userNumbers) / float(len(userNumbers))
return mean
#omitted
userNumbers = numberPlacement()
print(userChoice(userNumbers))
#list comprehension rewritten as a basic for loop in response to question in comment
final_list = []
for u in userNumbers.split(','):
x = u.strip()
y = int(x)
final_list.append(y)
return final_list
我一直在尝试编写一个均值、中值和众数计算器。我有两个问题。 1)我如何将用户输入的数字添加到空列表中。如果我简单地输入数字,它会给我这个错误:
userNumbers = int(raw_input("Enter the digits here: "))
ValueError: invalid literal for int() with base 10: '2, 4, 6, 8'
我很想知道如何避免这种情况。 其次,我正在使用 Python 2.7.10,很快就会升级到 3.4。我知道在 3.4 上有一个名为 statistics 的模块,它具有中值函数,但它在 2.7.10 上不起作用。出于好奇,如果没有该函数,我将如何找到中位数。谢谢大家!
from collections import Counter
def numberPlacement():
print("Welcome to the PyCalculator, please enter a series of digits!")
userNumbers = int(raw_input("Enter the digits here: "))
userNumbers = []
def userChoice():
while True:
print("Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)")
userAnswer = raw_input("Enter your choice here: ")
if userAnswer == "Mean":
mean = sum(userNumbers) / float(len(userNumbers))
return mean
elif userAnswer == "Mode":
mode = Counter(userNumbers)
return mode
continue
print numberPlacement()
print userChoice()
您需要拆分输入:
a = raw_input("Enter the digits here: ").split(',')
b = [int(x) for x in a]
然后你就可以参考你的号码了。
您收到的错误是因为您试图将无效字符转换为 int。
您的输入是:1, 2, 3, 4
所以这些逗号是导致该错误的原因。
要纠正这个问题,只需删除您拥有的 int() 强制转换,通过在您的输入中附加 .split(',')
使您的输入成为一个列表。 split 所做的是通过在逗号上拆分将您的字符串转换为列表。这样你就会得到一个由字符串表示的数字列表。
因此,由于您是在做数学运算,因此需要确保您实际使用的是数字表示形式,而不是列表中数据的字符串表示形式。通过使用 Python 的 map
方法 (documentation),您可以使用一种简洁的单行解决方案,将您的所有条目转换为一个 int。
因此,您的用户输入可以简单地如下所示:
Python 3:
userNumbers = list(map(int, input("Enter the digits here: ").split(',')))
Python 2:
userNumbers = map(int, raw_input("Enter the digits here: ").split(','))
您的代码中还有另一个问题。在您的 userChoice 方法中,您引用了 userNumbers
。我认为这是 numberPlacement
方法中对 userNumbers
的引用。你不能这样做。
我建议您做的是让您的 userChoice 方法采用一个参数,该参数将是一个名为 userNumber 的列表,因为您似乎想分别调用这两个方法。很简单:
def userChoice(userNumbers):
# the rest of your code
现在,请务必记住,userChoice
方法中的 userNumbers
与 numberPlacement
方法中的 userNumbers
不同。要了解原因,这是范围界定的一部分。您可以阅读有关 here.
那么,当你现在调用你的方法时,你只需要做这样的事情:
number_placements = numberPlacement()
print(number_placements)
print(userChoice(number_placements))
当你把它们放在一起时,你的代码现在看起来像这样:
(Python 2)
from collections import Counter
def numberPlacement():
print("Welcome to the PyCalculator, please enter a series of digits!")
userNumbers = map(int, raw_input("Enter the digits here: ").split(','))
return userNumbers
def userChoice(userNumbers):
while True:
print("Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)")
userAnswer = raw_input("Enter your choice here: ")
if userAnswer == "Mean":
mean = sum(userNumbers) / float(len(userNumbers))
return mean
elif userAnswer == "Mode":
mode = Counter(userNumbers)
return mode
continue
r = numberPlacement()
print(userChoice(r))
演示:
Welcome to the PyCalculator, please enter a series of digits!
Enter the digits here: 1,2,3,4
Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)
Enter your choice here: Mode
Counter({1: 1, 2: 1, 3: 1, 4: 1})
您正在打印不需要打印的随机内容,并且您还拥有试图在全局范围内调用的局部范围变量
def numberPlacement():
print("Welcome to the PyCalculator, please enter a series of digits, comma seperated!")
userNumbers = raw_input("Enter the digits here: ")
return [ int(u.strip()) for u in userNumbers.split(',') ]
def userChoice(userNumbers):
print("Awesome, now that we haave your numbers please choose an operation (Mean, Median, or Mode!)")
userAnswer = raw_input("Enter your choice here: ")
if userAnswer == "Mean":
mean = sum(userNumbers) / float(len(userNumbers))
return mean
#omitted
userNumbers = numberPlacement()
print(userChoice(userNumbers))
#list comprehension rewritten as a basic for loop in response to question in comment
final_list = []
for u in userNumbers.split(','):
x = u.strip()
y = int(x)
final_list.append(y)
return final_list