2015-10-13 138 views
0
工作

我在蟒蛇掙扎在這個while循環我試圖讓程序繼續重演,直到它輸出的下限,上限和數字,但它最終爲我運行程序While循環不會在Python

import random 

num = 3 
print(num) 

message="" 

for n in range(num): 
    while message =="": 
     newnum= random.randint(48,122)   
     if newnum > 47 and newnum < 58: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 

     elif newnum > 64 and newnum <91: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 

     elif newnum > 97 and newnum < 123: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val)  

     else: 
      newnum -= random.randint(7,10) 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 

if (any(x.isupper() for x in message) and any(x.islower() for x in message)and any(x.isdigit() for x in message)): 
    print(message) 
else: 
    message ="" 
+2

您的停止狀況似乎已中斷。當它第一次進入時,消息不再等於「」。另外,清楚你的目標是什麼以及實際代碼的輸出總是很好的。甚至可能是預期結果的一個例子。 – FirstOne

+0

我希望看到的預期結果是輸出爲類似於7oV的輸出,其中包含小寫字母和大寫字母以及一個數字 – Bob

+0

字符測試前'message'中的值是多少。請在if測試前打印(消息)。 – lit

回答

0

你的問題主要是ident和while條件,看看我的代碼。

import random 

num = 3 
print(num) 

message="" 
end = False #set a valid condition to end the program 
for n in range(num): 
# while message =="": 
    while end == False: 
     newnum= random.randint(48,122)   
     if newnum > 47 and newnum < 58: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 
     elif newnum > 64 and newnum <91: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 
     elif newnum > 97 and newnum < 123: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val)  

     else: 
      newnum -= random.randint(7,10) 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 
     if (any(x.isupper() for x in message) 
      and any(x.islower() for x in message) 
      and any(x.isdigit() for x in message)): 

      print(message) 
      end=True 
#  else: 
#   message ="" 
+0

這個代碼是最相關的即時通訊尋找,但它超過3,除非有一個小寫,大寫和一個數字 – Bob

+0

只是添加len()條件和重置消息,如果它結束3 –

+0

'如果len(message)> 3: \t消息= 「」 否則: \t如果(任何(x.isupper(),用於信息x) \t和任何(x.islower(),用於信息x) \t和任何(x.isdigit ()for x in message)): \t \t print(message) \t \t end = True' –

0

第一次迭代後,你的消息將是!= of',因爲你將它設置爲chr(val)。因此它不會再次在while循環中重新輸入,並且它會剛剛完成for循環。

0

我認爲你的問題是在錯誤的注意。嘗試使用

for n in range(num): 
    while message =="": 
     newnum= random.randint(48,122)   
     if newnum > 47 and newnum < 58: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 

     elif newnum > 64 and newnum <91: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 

     elif newnum > 97 and newnum < 123: 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val)  

     else: 
      newnum -= random.randint(7,10) 
      val=chr(newnum) 
      val = newnum 
      message +=chr(val) 

     if (any(x.isupper() for x in message) and any(x.islower() for x in message) and any(x.isdigit() for x in message)): 
      print(message) 
     else: 
      message =""