我刚刚开始用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
。你知道吗
书中说:
Line 4 creates a new variable named
guessesTaken
:4. guessesTaken = 0
You’ll store the number of guesses the player has made in this variable. Since the player hasn’t made any guesses at this point in the program, store the integer
0
here.
这并不能证明这条线的存在。你知道吗
这并没有什么好的理由,但无论如何,对于Python代码来说,这是一种不稳定的结构。用这种方式表达代码需要循环变量在循环退出后保留在作用域中,这(虽然在Py2和Py3中都是准确的)在编程上有点费劲。我不是唯一一个有经验的Python程序员,他认为:
因此,我会完全避免这种结构,而更倾向于:
循环之前的声明没有任何作用。它只是为了可读性或对代码的理解。你知道吗
首先,Python不需要声明变量;它们从上下文继承它们的类型,并且可以随心所欲地更改。您引用的行定义了
guessesTaken
;没有这样的声明。相反,global
将声明一个变量。你知道吗正如
Sam
已经说过的,让你困惑的那句话(对你有好处!)是无用的:for
语句充分定义了变量,以便在那里使用;第4行中给它的任何值都会被销毁;它可以很容易地被删除在循环之前不使用
guessesTaken
的值,在循环sloppy变量使用之后,名称被重新定义为字符串(文本值高一个)。另外,请注意如何有独立的、排他的和详尽的if
语句,这些语句应该是if - elif - else
结构,以保持清洁和效率。你知道吗简而言之,这不是一个学习编程风格的好例子。你知道吗
相关问题 更多 >
编程相关推荐