Я довольно опытный программист 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# я бы ожидал, что guessesTaken в объявлении For выходит за рамки остальной части программы. Однако при более позднем использовании переменной нет проблем с доступом к рассматриваемому номеру.
Чтобы проверить это, я добавил переменную testNumber в блок For и присвоил ей значение «5». Конечно же, попытка распечатать число за пределами его области просто работает ...!
Я немного заржавел с программированием, но это все еще меня немного сбивает с толку - это For l oop не рассматривается ли область действия, отличная от окружающего ее блока? Эта страница , кажется, предполагает иное, но я полагаю, что вполне возможно, что циклы For в Python рассматриваются в области видимости с их окружением.
Это кажется немного странным. Кто-нибудь может поставить меня прямо здесь? Я вернусь к C#, чтобы проверить это на этом языке позже, но любые ответы сейчас были бы очень признательны. Спасибо!