2016-06-01 12 views
0

私はUdemyを通していくつかのコースを取っています。 Python 3.xコースの最終プロジェクトでは、私がうまくやった簡単なUIを作っています。Python 3.5辞書に追加して値を代入する

前提は、学生のための等級トラッカーです。成績を追加したり、生徒を削除したり、生徒の成績を平均したり、プログラムを終了したりすることができます。

私はレッスンではないことをしたいと思っていました。新しい学生を追加することができました。私は別のオプションを追加しました。私は思っていたことを入力しようとしましたが、エラーが続いています。私は最終的に新しい生徒に入ることができましたが、その生徒の成績を追加しようとすると、生徒は存在しなかったと言えます。

私はこれをどのように達成することができますか?

すべてのサポートをよろしくお願いいたします。以下のコード:

#Making a Python Program 

from statistics import mean as m 

admins = {'Python':'[email protected]', 'user2':'pass2'}#this will be here authorized users and passwords would be 

studentDict= {'Jeff':[78,88,93], 
       'Alex':[92,76,88], 
       'Sam':[89, 92, 93]} 

def enterGrades(): 
    nameToEnter= input('Student Name: ') 
    gradeToEnter= input ('Grade: ') 

    if nameToEnter in studentDict: 
     print('Adding Grade...') 
     studentDict [nameToEnter].append(float(gradeToEnter)) 
    else: 
     print ('Student does not exist.') 
    print (studentDict) 

def removeStudent(): 
    nameToRemove = input ('Which student do you want to remove?: ') 
    if nameToRemove in studentDict: 
     print('Removing student...') 
     del studentDict[nameToRemove] 
    print (studentDict) 

def addStudent(): 
    nameToAdd = input ('Enter the name of the new student: ') 

    if nameToAdd in studentDict: 
     print ('Student already exists.') 
    else: 
     print ('Adding new student...') 
     studentDict[nameToAdd] 
     print (studentDict) 
     #Crashes upon entering student name. 

def studentAVGs(): 
    for eachStudent in studentDict: 
     gradeList= studentDict[eachStudent] 
     avgGrade = m(gradeList) 

     print(eachStudent, 'has an average grade of', avgGrade) 


def main(): 
    print(""" 
    Welcome to Grade Central 

    [1] - Enter Grades 
    [2] - Remove Student 
    [3] - Add Student 
    [4] - Student Average Grades 
    [5] - Exit 
    """) 
    action= input ('What would you like to do today? (Enter a number) ') 

    if action == '1': 
     enterGrades() 
    elif action == '2': 
     removeStudent() 
    elif action == '3': 
     addStudent() 
    elif action == '4': 
     studentAVGs() 
    elif action == '5': 
     exit() 
    else: 
     print ('No valid choice was given, try again') 



login= input('Username: ') 
passw= input('Password: ') 

if login in admins: 
    if admins[login] == passw: 
     print('Welcome,',login) 
     while True: 
      main() 
    else: 
     print('Invalid Password, will detonate in 5 seconds') 
else: 
    print ('Invalid username, calling the FBI to report this') 
+0

基本的には、オプション3の新しい生徒に入力して、その生徒にオプション1で成績を割り当てることができます。新しい生徒を作成するときに成績を入力する必要があるので、キーの値はすぐに? –

+0

いいえ、言葉の貧しい選択。これは、実世界に価値のないテキストベースのプログラムです。それはトレーニングのためのものです。 –

答えて

0

値なしのキーを追加することはできません。あなたがlistする「学生」のレコードを期待しているためまた、あなたにも空のリストでそれを作成することがあります:あなたがかもしれないキーとして学生の辞書を作成し、リストにそれらを指しているので

def addStudent(): 
    nameToAdd = input ('Enter the name of the new student: ') 

    if nameToAdd in studentDict: 
     print ('Student already exists.') 
    else: 
     print ('Adding new student...') 
     studentDict[nameToAdd] = [] 
     print (studentDict) 
+0

これはすばらしい回避策ですが、デフォルトのdictを使用しているので、Pythonがすでに持っていることをする必要はありません。 – Seekheart

+1

@Seekheartはい、確かにそうですが、OPは明らかにPythonの 'dict'が' dict'を使って単純な答えを与える作業の基本を得ていないので、IMHOははるかに便利です。Pythonを使うと、 dictsとバインディングを取得します。実際には、それは "回避策"である_your_ answerです。問題解決の代わりにOP問題を回避します; –

0

私はあなたがpythonの驚異的な高次のデータ構造を利用することをお勧めしますか?特にdefaultdict?あなたの問題については、デフォルトのディクテーションを適用する場合は、あなたが持っているこの問題を簡単に処理することができます。以下のように。

from collections import defaultdict 

studentDict = defaultdict(list) 
#rest of your code will now work because all keys you enter in your 
#addStudent() function will have an automatic value of an empty list 
+0

この回答は、defaultdictがどのように動作するか説明した場合に、初心者に役立ちます – Daenyth

+0

これは、なぜOPコードが機能しないのか、魔法の「回避策」を立証するのではなく、それを動作させる方法について説明します。 –

関連する問題