我一直在尝试写一个平均值,中位数,和模式计算器。我有两个问题。1) 如何将用户输入的数字添加到空列表中。如果我只是简单地输入数字,它会给我这个错误:
userNumbers = int(raw_input("Enter the digits here: "))
ValueError: invalid literal for int() with base 10: '2, 4, 6, 8'
我很想知道如何避免这种情况。 其次,我正在使用Python2.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()
您收到的错误是因为您试图将无效字符强制转换为int
您的输入是:
1, 2, 3, 4
,所以这些逗号是导致错误的原因。你知道吗要纠正这种情况,只需删除int()类型转换,通过在输入中添加
.split(',')
使输入成为一个列表。拆分的作用是通过逗号拆分将字符串转换为列表。这样,您将有一个由字符串表示的数字列表。你知道吗所以,既然你在做数学,你需要确保你实际上使用的是数值表示法,而不是列表中数据的字符串表示法。通过使用Python的
map
方法(documentation),有一个简洁的单行解决方案,可以将所有条目转换为int因此,您的用户输入可以简单地如下所示:
Python 3:
Python 2:
代码中还有一个问题。在userChoice方法中,您引用的是
userNumbers
。我认为这是在numberPlacement
方法中对userNumbers
的引用。你不能这么做。你知道吗我建议你做的是,既然你想分别调用这两个方法,那就让你的userChoice方法接受一个参数,这个参数是一个列表,叫做userNumber。简单地说:
现在,非常重要的是要记住,
userNumbers
方法中的userChoice
与numberPlacement
方法中的userNumbers
不同。为了理解原因,这是范围界定的一部分。你可以读到here。你知道吗所以,当你现在调用你的方法时,你只需要这样做:
当你把它们放在一起,你的代码现在看起来像这样:
(Python2)
演示:
你打印的是不需要打印的随机的东西,还有你试图全局调用的局部变量
您需要拆分输入:
然后你可以参考你的号码。你知道吗
相关问题 更多 >
编程相关推荐