2017-10-12 15 views
0

Dies ist nur ein einfaches Spiel, das ich zusammengestellt habe, das dir ein paar Fragen stellt und dann automatisch einen neuen Passcode aus den Antworten formatiert.Wie kann ich dieses einfache Python-Programm komprimieren, um es effizienter zu machen?

Da ich ein Anfänger bin, würde ich gerne einige Techniken kennen lernen, die ich verwenden könnte, die die Effizienz dieses Codes erhöhen würde, und vielleicht die verrückte Menge von Funktionen entfernen, die ich erklärt habe. Danke!

minimum = 3 
maximum = 10 

name = input("What is your name? ") 

def nameInput(): 

    if len(name) < minimum: 
     print("Name is too small") 
     return nameInput() 
    elif len(name) > maximum: 
      print("Name is too large") 
      return nameInput() 

nameInput() 

food = input("What is your favorite food? ") 

def foodInput(): 

    if len(food) < minimum: 
     print("Enter a food name longer than " + (food)) 
     return foodInput() 
    elif len(food) > maximum: 
      print("Enter a food name shorter than " + (food)) 
      return foodInput() 

foodInput() 

birthday = input("What is your date of birth? (mmddyyyy) ") 

nameIndex = name[0:2] 
foodIndex = food[2: ] 
birthIndex = birthday[0:3] 

passcode = nameIndex + foodIndex + birthIndex 

print("Your password is " + passcode) 
+1

Es gibt zwei Funktionen. Ich würde das nicht als "verrückte Menge" bezeichnen. – mkrieger1

+1

Sie könnten eine einzelne Funktion 'get_input (question, min_len, max_len)' – mshsayem

+5

erstellen. Wenn Sie bereit sind, Feedback zu allen Aspekten Ihres Codes zu akzeptieren, neben der Verkürzung, können Sie ihn unter https: //codereview.stackexchange veröffentlichen .com /. – mkrieger1

Antwort

1

Wenn Sie nach Kürze sind, versuchen Sie eine einzelne Funktion nicht mehrfach zu verwenden, als mehrere Funktionen ein einziges Mal

def get_input(variable_name, min_size, max_size, begin, end):     
    data = input("What is your {}? ".format(variable_name))     
    if len(data) < min_size:             
     raise ValueError('{} is too small'.format(variable_name.capitalize())) 
    elif len(data) > max_size:             
     raise ValueError('{} is too big'.format(variable_name.capitalize())) 
    return data[begin:end]              

name_index = get_input("name", 3, 10, 0, 2)         
food_index = get_input("food", 3, 10, 2, 100)         
birth_index = get_input("date of birth (mmddyyyy)", 3, 10, 0, 3)    
passcode = name_index + food_index + birth_index        

print("Your passcode is", passcode)                 
+0

Besser nicht 'assert' für die Ablaufsteuerung verwenden (siehe https://stackoverflow.com/questions/944592/best-practice-for-python-assert/945135#945135). – mkrieger1

+1

Huh, TIL. Bearbeitete Antwort, um Ausnahmen zu verwenden. – triphook

+0

Danke, das ist fast genau das, was ich brauchte! Ich muss es nur ein bisschen anpassen. – Jake

Verwandte Themen