более питонический способ назначить userInput для словаря? - PullRequest
0 голосов
/ 24 ноября 2018

Мне поставили эту задачу в классе колледжа CS.По-прежнему новое в словарях и наборах и кодирования в целом.Так что я ищу более питонический способ для раздела userInput для словаря.Это работает для моих нужд, но это будет утомительно для чего-то большего, чем это.Да, я видел другие вопросы об этой аналогичной функции от CodeAcademy, но у них нет ответа на мою проблему.Спасибо заранее за любые данные.Береги себя.

gradeBook = {
  "student1" : {
  "name": "Andy", 
  "homework": [90.0, 85.0, 78.0, 92.0], 
  "quizzes": [85.0, 87.0, 90.0, 75.0, 95.0], 
  "tests": [85.0, 65.0]
  },
"student2" : {
  "name": "Brad", 
  "homework": [88.0, 78.0, 86.0, 99.0], 
  "quizzes": [88.0, 82.0, 100.0, 74.0, 82.0], 
  "tests": [90.0, 92.0]
  }, 
"student3" : {
  "name": "Billy",
  "homework": [81.0, 79.0, 80.0, 50.0], 
  "quizzes": [80.0, 78.0, 95.0, 80.0, 84.0], 
  "tests": [95.0, 93.0]
  }}
for k, v in gradeBook.items():
  print()
  for k in v:
    print(k + ':', v[k])
print()

userInput = input("Which students' average would you like to view: \nAndy, Brad, or Billy? \n")
print()

#assigning userInput to a students dictionary
if userInput == "Andy":
  userInput1 = gradeBook["student1"]["homework"]
  userInput2 = gradeBook["student1"]["quizzes"]
  userInput3 = gradeBook["student1"]["tests"]
elif userInput == "Brad":
  userInput1 = gradeBook["student2"]["homework"]
  userInput2 = gradeBook["student2"]["quizzes"]
  userInput3 = gradeBook["student2"]["tests"]
else:
  userInput1 = gradeBook["student3"]["homework"]
  userInput2 = gradeBook["student3"]["quizzes"]
  userInput3 = gradeBook["student3"]["tests"]

def get_average(userInput):
  averageHW = sum(userInput1) / len(userInput1)
  averageQ = sum(userInput2) / len(userInput2)
  averageT = sum(userInput3) / len(userInput3)
  print(averageHW, averageQ, averageT) #normal average
  wAverageHW = averageHW * 0.10
  wAverageQ = averageQ * 0.30
  wAverageT = averageT * 0.60
  print(wAverageHW, wAverageQ, wAverageT) #weighted average

get_average(userInput)

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Вы можете использовать распаковку кортежей, чтобы пройти через ваш словарь for key, student in gradebook.items(): If student ['name'] == userinput: getaverage(student)

Что-то вроде этого, более более питоническое, позволяет вам одновременно проходить ключевые и значимые части словаря

0 голосов
/ 24 ноября 2018

Вам необходимо изменить ключ словаря, если вы собираетесь выполнять поиск по имени студента.

gradebookByStudent = {gradebook[k][‘name’]: gradebook[k] for k in gradebook}

#get your student name via user input 

print(‘HW average is: ‘ + mean(gradebookByStudent[userInput][‘homework’]))

Это дает вам поиск в O (log (n)) в худшем случае, в среднем O (1)) против O (n), когда вы перебираете свой словарь, это значительно экономит время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...