2017-02-18 154 views
2

無法跳出python中的while循環: 我嘗試將代碼合併在一起,沒有主函數和getheight函數,它仍然給我一個無限循環。python中無法跳出while循環

def main(): 
    x = 0 
    while x not in range (1,23): 
     getheight() 
     if x in range (1,23): 
      break 
    for i in range (x): 
     for j in range (x - j): 
      print (" ", end="") 
     for j in range (x): 
      print ("#", end="") 
     print (" ", end="") 
     for j in range (x): 
      print ("#", end="") 
     "\n" 

def getheight(): 
    x = input("Give me a positive integer no more than 23 \n") 
    return x 

if __name__ == "__main__": 
    main() 
+0

,因爲你的主x是始終爲0,'X =的getHeight()' – dnit13

回答

1

main()x是一個局部變量是從在getheight()x可變獨立。您將從後者返回新值,但忽略返回的值。從函數調用結果main設置x

while x not in range (1,23): 
    x = getheight() 
    if x in range (1,23): 
     break 

您還需要修復您的getheight()函數返回一個整數,而不是字符串:

def getheight(): 
    x = input("Give me a positive integer no more than 23 \n") 
    return int(x) 
+0

我添加了 「X =」。但仍然給我一個無限循環。我認爲這是因爲main的初始聲明。但是如果我刪除它,Python不會進入while循環。有沒有辦法解決這個問題? – user627154

+0

@ user627154:除非在循環之前分配了*'x',否則您的代碼將無法工作*。如果你移除了'x = 0'並且不捕獲'getheight()'的返回值,那麼你必須有一個全局名稱'x',它恰好被設置爲一個有效值。 –

+0

@ user627154:啊,我錯過了你正在返回'input()'值不變,所以*字符串*,而不是一個整數。 –

0

迴歸並不意味着它會自動更新主要匹配返回變量的任何變量名稱。如果你不存儲這個返回值,返回值將會消失。因此,你必須做

x=getheight() 

更新您的變量x