2015-11-06 271 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是你的字典對象)