2013-10-05 30 views
-1

我有一個問題,我的蟒蛇代碼,使蜂鳴聲。 即使應該停止,它也會發出無限循環的嘟嘟聲。問題與Python while循環沒有結束

import winsound 
import time 
z = 1 
while z == 1: 
    b = input('Enter number of beeps required') 
    print(b) 
    a = input('Is this number correct?') 
    if a == "yes": 
     print('Python shall use this number') 
     z = 2 
    if a == "no": 
     b = input('Enter number of beeps required') 
x = 1 
y = -1 
while x == 1: 
    freq = 1500 
    dur = 50 
    winsound.Beep(freq,dur) 
    y += 1 
    if y == b: 
     x = 2 

感謝所有幫助

+0

對不起這個可怕的組織帖子我被衝了,沒有正確編輯它 – user2844158

+0

爲什麼這個複雜的檢查,以驗證輸入是否正確?只需詢問用戶並使用此號碼(即將其轉換爲一個)。如果他進入胡言亂語,那就是他的問題。 – glglgl

+1

我冒昧地根據[PEP-8(Python代碼樣式指南)](http://www.python.org/dev/peps/pep-0008/)重新格式化您的代碼。您應該閱讀並尊重它,以使您的程序更易於閱讀。 –

回答

2

變化

b=input ('Enter number of beeps required') 

b=int(input ('Enter number of beeps required')) 

您正在閱讀b爲字符串,並將其與針對int

if y == b: 

永遠不會是True。這就是爲什麼你的代碼無限循環。

3

您的問題是input() Python的3返回一個字符串,所以b將是一個字符串,因此y == b永遠不會True

使用

b = int(input('Enter number of beeps required')) 
4

如果您正在使用Python 3.x中,input()返回一個字符串對象。

比較string對象和int總是返回False。

>>> '1' == 1 
False 

應該轉換字符串對象之前,詮釋對它們進行比較:

b = int(b) 

順便說一句,這是更好地使用下面的代替while循環:

for i in range(int(b)): 
    ...