2017-01-06 71 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

什麼是「禮物」?你想給孩子的禮物數量是多少?如果是這樣,那麼爲什麼如果你有預定義數量的禮物給他們呢? –

+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. 

實際上,每個辭典鍵變成TrueFalse只有一個曾經評價到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