这个初学者 Python 计划的范围是怎么回事?
What is going on with scope in this beginners Python program?
我是一位相当有经验的 C# 程序员,正在研究 Python。我正在研究一本名为 Python 发明你自己的电脑游戏的书。第二章特色游戏...
# This is a Guess the Number game.
import random
# guessesTaken = 0
print ("Hello! What is your name?")
myName = input()
number = random.randint(1,10)
print("Well, " + myName + ", I am thinking of a number between 1 and 10.")
for guessesTaken in range(6):
print ("Take a guess.") # Four spaces in front of "print"
guess = input()
guess = int (guess)
testNumber = 5
if guess < number:
print("Your guess is too low.") # Eight spaces in front of "print"
if guess > number:
print ("Your guess is too high.")
if guess == number:
break
if guess == number:
guessesTaken = str(guessesTaken + 1)
print ("Good job, " + myName + "! You guessed my number in " + guessesTaken + " guesses!")
if guess != number:
number = str(number)
print ("Nope. The number I was thinking of was " + number + ".")
testNumber = str(testNumber)
print (testNumber)
我对 guessesTaken 变量有点困惑,所以我注释掉了它的实例化行 - 惊讶地发现代码仍然表现正常。
在 C# 中,我希望 For 声明中的 guessesTaken 超出程序其余部分的范围。但是,以后使用该变量访问相关数字没有问题。
为了对此进行测试,我在 For 块中添加了变量 'testNumber' 并将其分配为“5”。果然,尝试在其范围之外打印数字就可以了...!
我对编程有点生疏,但这对我来说仍然有点困惑 - For 循环是否不被视为与它周围的块不同的范围? This page 似乎另有建议,但我想可能是 Python 中的 For 循环在其周围环境的范围内被考虑。
只是看起来有点奇怪。有人可以把我放在这里吗?稍后我会回到 C# 以使用该语言对此进行测试,但现在任何答复都将不胜感激。谢谢!
for guessesTaken in range(6):
创建变量 guessesTaken
而无需您显式地执行它,这就是为什么以下代码也可以工作(结果为 9):
for x in range(0, 10):
pass
print(x)
但是,这会导致 NameError
:
print(x)
for x in range(0, 10):
pass
这可能隐藏在 documentation 的某个地方。
您可以访问 testNumber
的原因是它已分配给 local scope by default; unless it's explicitly set, which in your code, happens to be local to the entire script. The for loop is not considered to be in a different scope。
我是一位相当有经验的 C# 程序员,正在研究 Python。我正在研究一本名为 Python 发明你自己的电脑游戏的书。第二章特色游戏...
# This is a Guess the Number game.
import random
# guessesTaken = 0
print ("Hello! What is your name?")
myName = input()
number = random.randint(1,10)
print("Well, " + myName + ", I am thinking of a number between 1 and 10.")
for guessesTaken in range(6):
print ("Take a guess.") # Four spaces in front of "print"
guess = input()
guess = int (guess)
testNumber = 5
if guess < number:
print("Your guess is too low.") # Eight spaces in front of "print"
if guess > number:
print ("Your guess is too high.")
if guess == number:
break
if guess == number:
guessesTaken = str(guessesTaken + 1)
print ("Good job, " + myName + "! You guessed my number in " + guessesTaken + " guesses!")
if guess != number:
number = str(number)
print ("Nope. The number I was thinking of was " + number + ".")
testNumber = str(testNumber)
print (testNumber)
我对 guessesTaken 变量有点困惑,所以我注释掉了它的实例化行 - 惊讶地发现代码仍然表现正常。
在 C# 中,我希望 For 声明中的 guessesTaken 超出程序其余部分的范围。但是,以后使用该变量访问相关数字没有问题。
为了对此进行测试,我在 For 块中添加了变量 'testNumber' 并将其分配为“5”。果然,尝试在其范围之外打印数字就可以了...!
我对编程有点生疏,但这对我来说仍然有点困惑 - For 循环是否不被视为与它周围的块不同的范围? This page 似乎另有建议,但我想可能是 Python 中的 For 循环在其周围环境的范围内被考虑。
只是看起来有点奇怪。有人可以把我放在这里吗?稍后我会回到 C# 以使用该语言对此进行测试,但现在任何答复都将不胜感激。谢谢!
for guessesTaken in range(6):
创建变量 guessesTaken
而无需您显式地执行它,这就是为什么以下代码也可以工作(结果为 9):
for x in range(0, 10):
pass
print(x)
但是,这会导致 NameError
:
print(x)
for x in range(0, 10):
pass
这可能隐藏在 documentation 的某个地方。
您可以访问 testNumber
的原因是它已分配给 local scope by default; unless it's explicitly set, which in your code, happens to be local to the entire script. The for loop is not considered to be in a different scope。