2015-11-06 268 views
0

我最近开始学习Python,并且正忙于为Codecademy教程进行学习。我刚刚完成了本教程,您将在其中创建一个程序来确定字典中标记的平均值。继承人的当前代码:在Python中使用用户输入来创建字典

lloyd = { 
    "name": "Lloyd", 
    "homework": [90.0, 97.0, 75.0, 92.0], 
    "quizzes": [88.0, 40.0, 94.0], 
    "tests": [75.0, 90.0] 
} 
alice = { 
    "name": "Alice", 
    "homework": [100.0, 92.0, 98.0, 100.0], 
    "quizzes": [82.0, 83.0, 91.0], 
    "tests": [89.0, 97.0] 
} 
tyler = { 
    "name": "Tyler", 
    "homework": [0.0, 87.0, 75.0, 22.0], 
    "quizzes": [0.0, 75.0, 78.0], 
    "tests": [100.0, 100.0] 
} 

class_list = [lloyd, alice, tyler] 

def average(numbers): 
    total = sum(numbers) 
    total = float(total) 
    total = total/len(numbers) 
    return total 
def get_average(student): 
    homework = average(student["homework"]) 
    quizzes = average(student["quizzes"]) 
    tests = average(student["tests"]) 
    return homework * 0.1 + quizzes * 0.3 + tests * 0.6 
def get_class_average(students): 
    results = [] 
    for student in students: 
     results.append(get_average(student)) 
    return average(results) 
print get_class_average(class_list 

但我想做的事作为一个扩展的是更加方便用户通过在使程序要求用户输入lloyd在第一线,以及输入的所有值友好字典。此外,我想让程序生成一个新字典,每次用户输入字典的名称时,例如第一行的lloyd。然后用所有词典填写class_list。最后,我希望把它使用户可以在该行的标记也输入权重:

return homework * 0.1 + quizzes * 0.3 + tests * 0.6

我无法这样做,所以任何帮助,将不胜感激。

+1

这并未看起来对于我来说,像你的问题是,“我如何在Python中接受用户输入?” –

+0

[python:getting user input]的可能重复(http:// stackoverflow .com/questions/3345202/python-getting-user-input) –

+0

请参阅:http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/io.html – 2015-11-06 20:45:37

回答

1

你不能生成动态变量名称,但你不需要反正。只需使用而对于输入,然后添加到列表中

cancel = False 
class_list = [] 

while (True): 
    name = input("Give the name of the user you want to add: ") 
    homework = [int(i) for i in input("Homework marks (seperated by spaces): ").split(" ")] 
    quizzes = [int(i) for i in input("Quiz marks (seperated by spaces): ").split(" ")] 
    tests = [int(i) for i in input("Test marks (seperated by spaces): ").split(" ")] 

    class_list.append({ 
     "name": name, 
     "homework": homework, 
     "quizzes": quizzes, 
     "tests": tests 
    }) 

    cont = input("Want to add another? (Y/N)") 
    if cont == "N": 
     break; 

print(class_list) 

[int(i) for i in...]被称为“列表理解。他们遍历串数字列表使其整数(用INT())。

+0

每当我使用此代码必须输入我必须把输入“”我得到的连接错误,因为我输入的是字符串,不是整数的数字。 – PuppetCode

+0

然后你使用Python 2.x和必须使用的raw_input() – weidler

+0

谢谢,切换到Python 3,但仍得到一个错误说:回溯(最后最近一次调用): 文件“test.py3” 36行,在 打印(get_class_average(class_list)) 文件 “test.py3”,第34行,在get_class_average results.append(get_average(学生)) 文件 “test.py3”,第27行,在get_average 功课=平均(学生[“家庭作业”]) 文件“测试。py3“,第22行,平均值 total =总和(数字) TypeError:不支持的操作数类型为+:'int'和'str' – PuppetCode

-2

也许你应该创建一个简单的类?

class Student: 
    def __init__(self, name, homework, quizzes, tests): 
     self.name = name 
     self.homework = homework 
     self.quizzes = quizzes 
     self.tests = tests 

和使用功能这样的输入:

def input_student(): 
     name = input("Enter name") 
     homework = [float(h) for h in input("Enter homework results separated by a space:)] 
     # same for quizzes and tests 
     class_list.append(Student(name, homework, quizzes, tests)) 

如果你不想创建一个类,你可以做同样的事情用一个字典(分配给d [“名” ]而不是名称等,其中d是你的字典对象)