Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过CMD向用户输入的字典添加新的详细信息_Python - Fatal编程技术网

Python 如何通过CMD向用户输入的字典添加新的详细信息

Python 如何通过CMD向用户输入的字典添加新的详细信息,python,Python,我是Python编程新手,我创建了一个方法,通过cmd的用户输入将新的学生名字和新的分数输入到现有的字典中,但我发现很难排序。我该怎么处理呢 我已经能够正确地编写其他方法的代码。只有上述方法在运行时给出错误: StudDict={'James':[70,75,95,], 'Adams':[75,90,73], 'Benjamin':[80,79,85]} #The below is where im having problems. def AddStudent(

我是Python编程新手,我创建了一个方法,通过cmd的用户输入将新的学生名字和新的分数输入到现有的字典中,但我发现很难排序。我该怎么处理呢

我已经能够正确地编写其他方法的代码。只有上述方法在运行时给出错误:

StudDict={'James':[70,75,95,],

      'Adams':[75,90,73],

      'Benjamin':[80,79,85]}

#The below is where im having problems.

def AddStudent(): #This method adds new student and grade to the existing Student dictionarydictionary

    StudToAdd= input('ENTER STUDENT NAME TO BE ADDED:  ')

    GradesToAdd=input("ENTER NEW STUDENT'S GRADE:  ")

    StudDict[StudToAdd].append(GradesToAdd)

    print(StudDict)

我希望能够向我已经创建的现有学生词典中添加新的学生(键)和成绩(值),并在词典中找到新添加的详细信息。

尝试使用
defaultdict
,因为它似乎非常适合您要做的事情:

从集合导入defaultdict
StudDict=defaultdict(列表)
#(可选)向对象提供现有数据:
#StudDict=defaultdict(列表,{existing_dict_with_data})
def add_student():
...
StudDict[StudToAdd].append(GradesToAdd)
有关更多详细信息,请参见此处的文档:


代码不起作用的原因是新的学生词典没有定义为列表;因此,您不能追加

有两种方法可以做到这一点,但是保持与现在相同的逻辑,您需要添加一些额外的步骤

>>> students = {'James': [70, 75, 95], 'Adams': [75, 90, 73], 'Benjamin': [80, 79, 85]}
>>> def add_student ():
...     new_student = input ('Enter student name to be added:' )
...     grades = input ('Enter new student\'s grade: ')
...     grades = grades.split (',')  # Split grades by comma
...     grades = [int (grade.strip (' ')) for grade in grades]  # Strip space between each grade & convert to integers
...     students [new_student] = grades  # Assign new student with grades
... 
>>> add_student()
Enter student name to be added:>? John
Enter new student's grade: >? 82, 79, 77
>>> students
{'Benjamin': [80, 79, 85], 'Adams': [75, 90, 73], 'James': [70, 75, 95], 'John': [82, 79, 77]}
根据评论更新答案
要删除学生分数,您需要确保数据库中存在该名称和分数

>>> def remove_scores():
...     name = input('Enter student name whose scores would be removed: ')
...     score = int (input('Enter score to be removed: '))
...     # Checking both student name and score exists in database
...     if name in students and score in students [name]:
...         score_index = students [name].index (score)  # Obtain the index location of the score
...         del students [name][score_index]
...         print (students)
...     else:
...         print('Student %s and/or %s score is not in our database.' % (name, score))
... 
首先,让我们为要删除的Adams添加一个额外的分数'79'

>>> students ['Adams'].append (79)
>>> students
{'Benjamin': [80, 79, 85], 'Adams': [75, 90, 73, 79], 'James': [70, 75, 97]}
接下来,测试name和score条件

>>> remove_scores()
Enter student name whose scores would be removed: >? Larry
Enter score to be removed: >? 59
Student Larry and/or 59 score is not in our database.
>>> remove_scores()
Enter student name whose scores would be removed: >? Adams
Enter score to be removed: >? 77
Student Adams and/or 77 score is not in our database.
一旦我们对结果满意,让我们删除并查看结果

>>> remove_scores()
Enter student name whose scores would be removed: >? Adams
Enter score to be removed: >? 79
{'Benjamin': [80, 79, 85], 'Adams': [75, 90, 73], 'James': [70, 75, 97]}

看看这可能会有帮助请尝试通过这种方式将数据设置到字典StudDict[StudToAdd]=GradesToAddit最好遵循PEP 8命名约定,因为函数+变量使用小写字母,必要时用下划线分隔-谢谢大家,所有建议都有效,我很感激这个社区登录:Admin1输入密码:Pass123@welcome******************************************************[.]-打印学生词典[0]-添加新学生[1]-输入成绩[2]-删除学生[3]-学生平均成绩[4]-退出课程~~~~~~~~~~~你想做什么(输入一个数字)~~~~~~~:0输入要添加的学生姓名:Dreamzboy进入新学生的年级:99,99,99{'James':[70,75,95],'Adams':[75,90,73],'Benjamin':[80,79,85],'Dreamzboy':[99,99]}仍在同一课程中,我正在尝试编写一个可以一个接一个地删除分数的方法。你也能帮我吗?这是我编写的代码。def remove_scores():StudNaMe=input(“输入要删除分数的学生姓名:”)SCORE_remove=print(“输入要删除的分数:”)如果StudNaMe在StuDict:StuDict[StudNaMe]。删除(SCORE_remove)print(StuDict)否则:print(StudNaMe,“不在我们的数据库中”)欢迎您!考虑将问题标记为: