2016-11-15 4 views
1

나는 이것을 지금 당분간 알아 내려고 노력해 왔으며, 나는 아직도 그것을 얻지 못하고있다! 나는 (사용자가 5보다 크거나 같을 때) 사용자가 입력 한 정확한 수의 행과 열을 반환하고 인쇄하려고하며 사용자가 입력하지 않은 경우 입력 문을 다시 묻습니다.while 루프에서 파이썬으로 올바른 정수를 반환하려고합니까?

여기에 지금까지 내 코드입니다 :

Please choose the number of rows: 
Please enter a number bigger/equal to 5: 3 
Please choose the number of columns: 
Please enter a number bigger/equal to 5: 5 
Please enter a number bigger/equal to 5: 6 
6 
5 

출력은 매우 이상하고 나는 그것을 해결하는 방법을 잘 모릅니다 :

여기
#CONSTANTS 
CON_NUM = int(5) 

def correctInteger(row): 
    #get valid row number: 
    while row < CON_NUM: 
     row = int(input("Please enter a number bigger than or equal to 5: ")) 
     if row >= CON_NUM: 
      return(row) 
    if row >= CON_NUM: 
     return(row) 

def correctNum(cols): 
    #get valid column number: 
    while cols < CON_NUM: 
     cols = int(input("Enter a number bigger than/equal to 5: ")) 
     if cols >= CON_NUM: 
      return(cols) 
    if cols >= CON_NUM: 
     return(cols) 

def main(): 
    #ask for number of rows: 
    print("Choose the number of rows:") 
    rows = int(input("Please enter a number bigger/ equal to 5: ")) 

    #ask for columns: 
    print("Please choose the number of columns:") 
    columns = int(input("Please enter a number bigger/ equal to 5: ")) 
    validRow = correctInteger(rows) 
    validColumn = correctNum(columns) 
    print(validRow) 
    print(validColumn) 

main() 

이 코드가 만드는 출력입니다! 왜 행 개수의 while 루프가 작동하지 않고 열만 인쇄하는지 알 수 없습니다.

Please choose the number of rows: 
Please enter a number bigger/equal to 5: 4 
Please enter a number bigger/equal to 5: 5 
Please choose the number of columns: 
Please enter a number bigger/equal to 5: 3 
Please enter a number bigger/equal to 5: 7 
5 
7 

(위 번호가있는 행과 하단에있는 열)

나는이 정말 오래 알고

하지만 내가 만들고있어 희망 : 내가 좋아하는 뭔가를 보일 수 있습니다 얻기 위해 노력하고

출력 감각! 시간 내 주셔서 감사합니다!

답변

0

논리를 너무 넓게 분산시켜 쉽게 따라갈 수 없습니다. 행과 열의 각각에 대해 두 위치에서 입력을 수집하고 사용자는 세 가지 다른 위치에서이를 확인합니다. 이 같은

을 단순화 뭔가 :

get_legal_row_limit(): 
    CON_NUM = 5 
    row = int(input("Please enter a number bigger than or equal to 5: ")) 
    while row < CON_NUM: 
     row = int(input("Please enter a number bigger than or equal to 5: ")) 
    return row 

지금, 당신의 메인 프로그램은 단순히 더 오버 헤드없이 ...

rows = get_legal_row_limit() 

와이를 호출합니다. 열에 대해서도 마찬가지로하십시오. 자두의 대답 @뿐만 아닌 수의 항목을 처리하는 약간 다른 구조와

Get me a value 
While the value is unacceptable 
    Get me another value 
Return the good value 
1

유사 :

이 기본 "나를 가져 뭔가 유용"구조입니다. 공통 요구 사항을 가지고 있으므로이를 배제하고 유효성 검사를 수행하는 단일 함수를 만듭니다. ask() :

# ask for a number at least as big as n 
def ask(n): 
    while True: 
     try: 
      i = int(input("Please enter a number bigger than or equal to {}: ".format(n))) 
      if i >= n: 
       return i 
     except ValueError: 
      pass 

def main():                  
    #ask for number of rows:                 
    print("Choose the number of rows:") 
    rows = ask(5) 

    #ask for columns:                
    print("Please choose the number of columns:") 
    columns = ask(5) 
    ...