2017-01-06 4 views
-4

Извините, если это звучит несложно, но я новичок в Python.Как использовать словарь для создания условия?

Если оценка ребенка больше или равна 100, они должны получить 8 подарков; если оценка ребенка составляет от 50 до 100, они получают 5 подарков, а если оценка ребенка ниже 50, то они получают 2 подарка.

Как использовать словарь для проверки правильности ввода данных пользователей?

Было бы первым показать свой результат как:

presents=[] 
People={"Dan":22, 
     "Matt":54, 
     "Harry":78, 
     "Bob":91} 

def displayMenu(): 
    print("1. Add presents") 
    print("2. Quit") 
    choice = int(input("Enter your choice : ")) 
    while 2< choice or choice< 1: 
     choice = int(input("Invalid. Re-enter your choice: ")) 
    return choice 

def addpresents(): 
    name= input('Enter child for their score: ') 
    if name == "matt".title(): 
     print(People["Matt"]) 
    if name == "dan".title(): 
     print(People["Dan"]) 
    if name == "harry".title(): 
     print(People["Harry"]) 
    if name == "bob".title(): 
     print(People["Bob"]) 
    present=input('Enter number of presents you would like to add: ') 
    if present 
     #This is where I got stuck 

option = displayMenu() 

while option != 3: 
    if option == 1: 
     addpresents() 
    elif option == 2: 
     print("Program terminating") 

option = displayMenu() 
+3

чем вопрос? – fedepad

+0

Что такое 'present'? Это количество подарков, которые вы хотите дать ребенку? Если да, то почему, если у вас есть предопределенное количество подарков, чтобы дать им? –

+0

Непонятно, что вы просите. Еще раз взгляните на ваш вопрос и попытайтесь четко изложить, с чем именно вы столкнулись. –

ответ

0

Связанные на поставленный вопрос:

Если оценка ребенка больше или равно, чем 100, они должны получить 8 подарков; если оценка ребенка составляет от 50 до 100, они получают 5 подарков, а если оценка ребенка ниже 50, то они получают 2 подарка.

Создайте словарь, в котором ключи являются логическими условиями для оценки. Но словарь нужно пересоздавать каждый раз, так как в его ключах используется score, и оценка может быть разной для каждого цикла.

>>> score = 3 
>>> presents = {score < 50: 2, 
...    50 <= score < 100: 5, 
...    score >= 100: 8 
...    }[True] 
>>> presents 
2 
>>> # and keep re-doing the 3 statements for each score. 

эффективно, каждый ключ словаря становится True или False с только один когда-либо вычисляемая True. Таким образом, получение значения ключаTrue дает количество подарков.

Полагая, что в функции имеет смысл, как:

def get_presents(score): 
    return {score < 50: 2, 
      50 <= score < 100: 5, 
      score >= 100: 8 
      }[True] 

И использовать его так:

>>> get_presents(25) 
2 
>>> get_presents(50) 
5 
>>> get_presents(100) 
8 
>>> 

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

В качестве альтернативы, вы можете сделать int(score/50) как ключи:

>>> present_dict = {1: 2, 
...     2: 5, 
...     3: 8 
...     } 
>>> 
>>> score = 500 
>>> present_dict[min(int(score/50) + 1, 3)] # needed to not go over 3 
8 
>>> score = 25 
>>> present_dict[min(int(score/50) + 1, 3)] # the +1 needed since it's int div 
2 
>>> # or put the expression above in the `get_presents` function and return that