Возникли проблемы при реализации функций. Тот, который может удалить элемент из списка, и тот, который может обновить элемент в словаре - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь добавить в свою программу функции, позволяющие мне удалить элемент из словаря, а также функцию, позволяющую обновить оценки ученика в словаре.

Комментируемые строки это разделы, которые мне нужно заполнить кодом.

Ниже приведен код, который у меня есть:

grade_book = {
                203942: [88,78,83],
                236732: [90,78],
            9874: [78],
                29746: [79,90], 
        75893: [82,80], 
        352418: [77,88,84],
        13563: [90,89,92] 
}

while True:
    print('Select 1 to display grades')
    print('Select 2 to add new student grade')
    print('Select 3 to update a student record')
    print('Select 4 to delete a student record')
    key_pressed = input("Selection: ")
    if key_pressed == '1':
        print('{:<15}'.format(', '.join(map(str, ["Students Ids"  , "Grades"]))))
        for key, value in grade_book.items():
            print("{:<15} {:<15}".format(key, ', '.join(map(str, value))))
            pass
    elif key_pressed == '2':
        id = input('Enter new student id: ')
        grades = input('Enter the grades: ')

        grade_book[id] = [int(grade) for grade in grades.split(',')]
    #elif key_pressed == '3':


    #elif key_pressed == '4':


    elif key_pressed == '5':
        break
    else:
        print('Error!',key_pressed, 'is not a valid value')

print('Program Ended!')

Вот пример вывода при вводе «3» (вход, указывающий Вы хотите обновить оценки учеников):

Selection: 3

Which student do you want to update?    
1 - 203942
2 - 236732
3 - 9874
4 - 29746 
5 - 75893 
6 - 352418
7 - 13563 
Selection: 3 

Enter the grades for the student separated by commas: 93,77,62
Updated Successfully!

Для этого я запутался в том, как вывести словарь, перечисленный таким образом, и как получить от пользователя информацию для выбора одного из указанных значений

Далее приведен пример выходных данных, когда '4' (ввод, указывающий на то, что вы хотите удалить учащегося из учебника):

Which student do you want to delete?
1 - 203942
2 - 236732
3 - 9874
4 - 29746 
5 - 75893 
6 - 352418
7 - 13563 
Selection: 2
Deleted successfully!

Опять же, я не совсем понимаю, как получить пункты в словаре, перечисленные как это, и как получить введенный пользователем номер

Я ценю любую помощь. Если вам нужно, чтобы я уточнил больше, пожалуйста, спросите. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Если я правильно понимаю. Я считаю, что вы хотите знать, как удалить элементы словаря и / или элементы списка. Стандартная команда для этого называется pop.

d = dict(thing=5,x=3,y=7)
print(d)
d.pop('thing')
print(d)

l = list('abcde')
print(l)
l.pop(2)
print(l)

Функция pop () по сути является функцией удаления. Функция pop () также возвращает значение, если вы хотите использовать только что удаленное значение.

0 голосов
/ 27 апреля 2020

Следующее добавляет функции 3 и 4. к вашему коду.

Код

grade_book = {
                203942: [88,78,83],
                236732: [90,78],
            9874: [78],
                29746: [79,90], 
        75893: [82,80], 
        352418: [77,88,84],
        13563: [90,89,92] 
}

while True:
    print('Select 1 to display grades')
    print('Select 2 to add new student grade')
    print('Select 3 to update a student record')
    print('Select 4 to delete a student record')
    key_pressed = input("Selection: ")
    if key_pressed == '1':
        print('{:<15}'.format(', '.join(map(str, ["Students Ids"  , "Grades"]))))
        for key, value in grade_book.items():
            print("{:<15} {:<15}".format(key, ', '.join(map(str, value))))
            pass
    elif key_pressed == '2':
        id = input('Enter new student id: ')
        grades = input('Enter the grades: ')

        grade_book[id] = [int(grade) for grade in grades.split(',')]
    elif key_pressed == '3':
      print('Which student do you want to update? ')
      print(*grade_book.keys(), sep='\n')
      student_id = input('Selection: ')
      if student_id.isdigit() and int(student_id) in grade_book:
        student_id = int(student_id)
        grades = input('Enter the grades for the student separated by commas: ')
        grades = list(map(int, grades.split(','))) # alternative to  [int(grade) for grade in grades.split(',')]
        grade_book.update({student_id: grades})
      else:
        print('Student not in grade book')

    elif key_pressed == '4':
      print('Which student do you want to delete? ')
      print(*grade_book.keys(), sep='\n')
      student_id = input('Selection: ')
      if student_id.isdigit() and int(student_id) in grade_book:
        student_id = int(student_id)
        del grade_book[student_id]
        print('Deleted successfully!')
    else:
        print('Student not in grade book')

    elif key_pressed == '5':
        break
    else:
        print('Error!',key_pressed, 'is not a valid value')

print('Program Ended!')

Объяснение

Вы упомяните, что вы не уверены:

  1. как получить список идентификаторов учеников.
  2. как удалить элемент из словаря
  3. как обновить словарь

Для 1, чтобы получить список идентификаторов студентов:

print(*grade_book.keys(), sep='\n')
  • grade_book.keys () - это список всех идентификаторов студентов
  • * grade_book.keys () - передает распечатывать каждый идентификатор как отдельный параметр (распаковка списка)
  • sep = '\ n' - помещает a между каждым параметром при печати

Для 2 , несколько вариантов удаления словарного ключа , но я использовал:

del grade_book[student_id]

Для 3, несколько вариантов обновить словарь , но я использовал:

grade_book.update({student_id: grades})

Другой вариант был бы:

grade_book[student_id] = grades
...