如何将用户的号码添加到列表中

时间:2015-10-22 23:45:57

标签: python list median

我一直试图写一个均值,中位数和模式计算器。我有两个问题。 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()

3 个答案:

答案 0 :(得分:1)

您需要拆分输入:

a = raw_input("Enter the digits here: ").split(',')
b = [int(x) for x in a]

然后你可以参考你的号码。

答案 1 :(得分:1)

您收到的错误是因为您尝试将无效字符强制转换为int。

您的输入是:1, 2, 3, 4所以这些逗号是导致该错误的原因。

要解决此问题,只需删除您拥有的int()广告素材,通过在输入中附加.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。我认为这是userNumbers方法中对numberPlacement的引用。你不能这样做。

我建议你做什么,因为看起来你想分别调用这两个方法,就是让你的userChoice方法取一个参数,这个参数叫做userNumber。简单地说:

def userChoice(userNumbers):
    # the rest of your code

现在,请务必记住,userNumbers方法中的userChoiceuserNumbers方法中的numberPlacement不同。要理解原因,这是范围界定的一部分。您可以阅读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})

答案 2 :(得分: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