2017-06-22 21 views
2

前引用了我在使用PyCharm社區編輯一個簡單的練習,我得到一個警告:沒有局部變量,但警告:分配

這種檢查發出警告之前 分配引用局部變量。

但是這裏沒有局部變量,並且它在Windows PowerShell上運行良好。它出什麼問題了?

# This is a guess the number game. 
import random 
secret_number = random.randint(1, 21) 
print("I am thinking of a number between 1 and 20. You have three chances.") 

# Ask the player to guess 3 times. 
for guesses_taken in range(1, 4): 
    guess = int(input('Take a guess.\n')) 
    if guess > secret_number: 
     print('Your guess is too high.') 
    elif guess < secret_number: 
     print('Your guess is to low.') 
    elif guess == secret_number: 
     if guesses_taken == 1: 
      print('Oh my god. You just guessed only one time.') 
     else: 
      print("You are right. I'm thinking of %s, and you guessed my 
       number in %s guesses." % (secret_number, guesses_taken)) 
    else: 
     break 
if guess != secret_number: --> # Name 'guess' can be not defined. 
    print('Nope. The number I was thinking of was ' + str(secret_number) + '.') 

同樣,這裏修改後的版本仍然有同樣的問題。

# This is a guess the number game. 
import random 
secret_number = random.randint(1, 21) 
print("I am thinking of a number between 1 and 20. You have three chances.") 

# Ask the player to guess 3 times. 
for guesses_taken in range(1, 4): 
    guess = int(input('Take a guess.\n')) 
    if guess > secret_number: 
     print('Your guess is too high.') 
    elif guess < secret_number: 
     print('Your guess is to low.') 
    else: 
     break 
if guess == secret_number: --> # Name 'guess' can be not defined 
    if guesses_taken == 1: --> # Name 'guesses_taken' can be not defined 
     print('Oh my god. You just guessed only one time.') 
    else: 
     print("You are right. I'm thinking of %s, and you guessed my number in %s guesses." % (
      secret_number, guesses_taken)) 
else: 
    print('Nope. The number I was thinking of was ' + str(secret_number) + '.') 

回答

1

你得到警告:他們不意味着按照預期的代碼將無法正常工作,但他們想告訴你的事情可能出錯在一定circomstances。

我不使用PyCharm,但我看到這些警告的原因是:

  • guess得到您的for循環內分配。所以,如果循環不執行至少一次,guess永遠不會被分配。

  • guesses_taken將首先被分配range的第一個值,然後第二個......但如果range均是空的,它也將永遠不會得到分配。

見,例如:

for loop_index in range(1, -1): # empty! 
    my_value_assigned_in_loop = 1 

print(loop_index) 
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-31-39f9878362fc> in <module>() 
     2  my_value_assigned_in_loop = 1 
     3 
----> 4 print(loop_index) 

NameError: name 'loop_index' is not defined 
+0

**感謝您的幫助**但是,在編程過程中這個問題允許,還是會帶來更多意想不到的麻煩? – Tuto

+1

不,你的程序非常好,因爲你的循環肯定會執行。 PyCharm用來給你警告的規則可能不會考慮到這些,只依賴於代碼的一般結構。無論如何,在沒有真正執行它的情況下,可以做什麼都有限制。所以,沒有任何麻煩! –

+0

**非常感謝** – Tuto