2017-10-12 15 views
0

이것은 몇 가지 질문을 한 다음 자동으로 답변에서 새 패스 코드의 서식을 지정하기 위해 함께 시도한 간단한 게임입니다.어떻게이 간단한 파이썬 프로그램을 더 효율적으로 만들 수 있습니까?

저는 초심자이므로이 코드의 효율성을 높이고 선언 한 기능의 미친 양을 제거 할 수있는 몇 가지 기술을 알고 싶습니다. 고맙습니다! 당신이 간결 후에 경우

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

한 시간을 여러 기능보다는 하나의 함수를 여러 번 사용하려고합니다. 나는 그것을 "미친 양"이라고 생각하지 않을 것입니다. – mkrieger1

+1

당신은 하나의 함수'get_input (question, min_len, max_len)'을 만들 수있다. – mshsayem

+5

코드의 모든 측면에 대한 피드백을 받아들이 기 원한다면 https : //codereview.stackexchange에 게시 할 수있다. .com /. – mkrieger1

답변

1

는 두 가지 기능이 있습니다

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

흐름 제어에 'assert'를 사용하지 않는 것이 좋습니다 (https://stackoverflow.com/questions/944592/best-practice-for-python-assert/945135#945135 참조). – mkrieger1

+1

허, TIL. 예외를 사용하기위한 수정 된 응답. – triphook

+0

감사합니다. 이것은 거의 정확하게 필요한 것입니다! 난 그냥 조금 사용자 정의해야합니다. – Jake