对于编程基础为零或者较为薄弱的初学者来说,自学Python时遇到的第一个难点可能就是while循环了。
当我第一次遇到这个难点的时候,我选择的方式是通过一些小练习,并且仔细思考练习中的每一个细节来加深对While循环的理解。
以下是Crossin先生Python编程教室关于While循环一个猜数字小练习的代码,基于自己的理解我对小练习的很多行代码都作了注释:
下面我将逐行解释小练习中的每一行代码(运行环境macOS Sierra,采用的IDE是PyCharm,如有错误敬请指正)。
第1行:
# -- coding: utf-8 --
首先看没有这行代码的情况下,Python报错:SyntaxError: Non-ASCII character '\xe6' in file /Users/CY/PycharmProjects/Analysis/whiletest.py on line 3, but no encoding declared; see PEP 263 -- Defining Python Source Code Encodings for details
原因是从第3行开始的注释符号后面,我用了中文,但默认情况下你的程序需要使用ASCII码来写,但如果在其中写中文的话,Python解释器一般会报错。加入上面这行代码之后,说明下面的Python代码使用的编码类型改为UTF-8的类型(因为UTF-8编码支持中文)。关于编码类型涉及到的其他内容比较复杂,希望自己深入学习之后能详细了解。
第3行:
from random import randint
random表示随机数模块,randint表示随机整数的方法;其中,randint = random(随机) + integer(整数),由随机random的前四个字母rand与整数integer的前三个字母int组合而成。
整个代码的含义是“从(from)随机数(random)模块中引入(import)随机整数(randint)的方法”。从Python代码英文本身的含义上去思考,会非常有助于记忆和理解。
第4行:
num = randint(1,10)
给变量num赋值,根据第2行的代码可知是从”1到10“这十个随机的整数。
第6行:
print 'Guess?'
在屏幕上输出”Guess?“
第7行:
w1 = False
给变量w1赋值为False,为了下面的while循环代码进行判断。变量的名称和赋值可以随意设置。
举个例子,这里也可以把代码为写成”x = 1“、”y = True“等等。如果这里不太明白,请继续往下看。
第9行、第10行:
while w1 == False:
answer = input()
while在英文中的解释是“当…的时候”,所以当代码执行到while时,程序需要进行一个条件判断,即“当”while的条件成立——为True时,运行while内部的代码,“当”while的条件不成立——为False时,跳过内部代码——即不运行while内部的代码。
练习中的条件是”w1 == False“,意思是w1恒等于False,而刚刚在第7行中给w1赋值为False,所以while的条件”w1 == False“成立,即False恒等于False是成立的,所以可以执行while内部的代码。因此,我把变量w1理解为判断变量,即为了进行判断而设置(赋值)的变量。
前面第7行给变量的赋值,是为了能够给下面的while循环进行条件判断,并且确保这个条件判断成立(为真),即判断后的值为”True“。按照上面第7行的例子,相应这里可以写成”x == 1“、”y == True“。
如何判断哪些代码是while内部的代码?在Python语言中,答案是看代码的缩进,即用”4个空格“或者”按一下tab“(切记不可混用,否则系统无法判断,将出现各种错误,大部分的IDE都可以帮助开发者自动缩进),有缩进的代码都是while内部的代码。
在这个小练习中,从”answer = input()“之后的所有代码,相对应while的位置都有缩进,所以都是while内部的代码。
第10行的代码表示变量answer需要用户自己输入(input)来进行赋值,即人向程序”输入信息“,最简单的人机交互。
第12行、第13行:
if answer < num:
print 'too small!'
if条件判断,如果answer小于num,输出”too small!"
第15行、第16行:
if answer > num:
print 'too big!'
if条件判断,如果answer大于num,输出”too big!"
第18行、第19行:
if answer == num:
print 'Great!'
if条件判断,如果answer等于num,输出”Great!"
第20行:
w1 = True
细心的人可能发现了,最后这一行代码是属于if条件“answer == num”内部的代码,并且重新给前面while循环的判断变量w1进行了赋值。因为之前的w1为False,当给w1赋值为True时,while的判断条件”w1 == False“就不成立了,所以这时while循环就结束了。并且因为这行代码属于if条件”answer == num“内部,就是说当用户猜出来数字的时候,整个程序就自动结束了,如下图:
如果删除这一行代码,那么这个猜数字的小游戏就可以永远不停止地一直玩下去,如下图:
哦,对了,如果按照上面第7行的例子,可以把第20行写成”x = 2“、”y = False“来跳出while循环。
其实没事做的时候,多敲敲代码玩也是挺有意思的。