2016-11-15 16 views
1

我一直在试图弄清楚这一点,现在我仍然无法得到它!我正在尝试返回并打印用户输入的正确行数和列数(当用户输入大于或等于5时)以及用户未输入时,再次提示输入语句。试图从while循环中返回正确的Python中的整数?

这里是我到目前为止的代码:

#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() 

下面是输出该代码使得:

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 

输出是很奇怪的,我不知道如何解决它!我不知道为什么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

你分配的逻辑过于分散,无法轻松追踪。你从两个地方为每一行和列收集输入,并且你在三个不同的地方检查它。

简化IT是这样的:

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