6

我刚刚开始通过Invent Your Own Computer Games with Python工作。这是第 3 章的示例代码:

1   # This is a Guess the Number game.      
2   import random       
3   
4   guessesTaken = 0        
5           
6   print('Hello! What is your name?')      
7   myName = input()        
8           
9   number = random.randint(1, 20)      
10  print('Well, ' + myName + ', I am thinking of a number between 1 and 20.')      
11          
12  for guessesTaken in range(6):       
13      print('Take a guess.') # Four spaces in front of "print"        
14      guess = input()     
15      guess = int(guess)      
16          
17      if guess < number:      
18          print('Your guess is too low.') # Eight spaces in front of "print"      
19          
20      if guess > number:      
21          print('Your guess is too high.')        
22          
23      if guess == number:     
24          break       
25          
26  if guess == number:     
27      guessesTaken = str(guessesTaken + 1)        
28      print('Good job, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!')       
29          
30  if guess != number:     
31      number = str(number)        
32      print('Nope. The number I was thinking of was ' + number + '.') 

guessesTaken当变量显然可以在 Python 中随时声明时,为什么要在开始时声明?

我已经尝试过完全不使用该行,也已更改guessesTaken为 0 以外的数字。在这两种情况下,它的工作方式似乎完全相同,因为range函数似乎可以管理guessesTaken.

书中指出:

第 4 行创建了一个名为 的新变量guessesTaken

4. guessesTaken = 0

您将在此变量中存储玩家所做的猜测次数。由于此时玩家在程序中没有做出任何猜测,所以将整数存储在0这里。

这并不能证明这条线对我的存在是合理的。

4

3 回答 3

3

首先,Python 不需要声明变量;它们从上下文继承它们的类型,并且可以随心所欲地改变。您所指的行定义 guessesTaken​​;没有这样的声明。相反,global声明一个变量。

如前所述Sam,让您感到困惑的那行(对您有好处!)是无用的:该for语句充分定义了变量以供其在其中使用;在第 4 行中赋予它的任何值都被销毁;它可能很容易

guessesTaken = ["My list", 7, True, "of useless data"]

循环前不使用的值,guessesTaken循环后将名称重新定义为字符串(文本值高一)——草率的变量使用。另外,请注意如何有独立的、排他的和详尽的if陈述——这些应该是if - elif - else清洁和效率的结构。

简而言之,这不是学习编程风格的好例子。

于 2018-08-06T21:28:47.070 回答
3

循环之前的声明没有任何意义。它仅用于代码的可读性或理解。

于 2018-08-06T21:20:43.683 回答
2

没有什么很好的理由,但无论如何这对于 Python 代码来说是一种不稳定的结构。以这种方式表达代码要求循环变量在循环退出后保持在范围内,这(虽然在 Py2 和 Py3 中都是准确的)对编程来说是一种心理负担。我不可能是唯一一个有经验的 Python 程序员,他认为:

for x in some_iter:
    frobnicate(x)

# x is undefined here

出于这个原因,我会完全避免这种结构,而是更喜欢:

for guess_number in range(MAX_GUESSES):
    guess = int(input("Guess: "))
    if guess == number:
        # it took guess_number+1 guesses. Let the player know and:
        break  # or return
    elif guess > number:
        # too high, tell the player
    elif guess < number:
        # too low, tell the player
else:
    # you trigger the for/else block when you don't break from a for loop
    # so getting here means you've failed to guess in MAX_GUESSES tries
    # tell the player and handle it
于 2018-08-06T21:28:16.157 回答