给普通人的Python——第二章

版权声明:本文为博主原创文章,转载请注明出处。http://blog.csdn.net/yingshukun https://blog.csdn.net/yingshukun/article/details/86438889

2. 改进语法

Python之禅要求我们写代码简洁优雅。在Python解释器中其实是有一个彩蛋的,这个彩蛋就是Python之禅。我们打开命令行输入python进入Python的交互式命令行,然后输入import this就可以看到这段话了,赶紧来试一试吧!

2.1 增强的条件判断

在上一篇中我们写了一个小游戏,其中嵌套使用了if-else条件判断

if num == 104:
    print("恭喜你,猜对了呢!")
    break
else:
    if num > 104:
        print("你猜的数字大了呢!")
    else:
        print("你猜的数字小了呢!")

试想一下,如果我们需要判断的条件比较多时,这种if-else嵌套就会变得臃肿,代码变得丑陋,我们写Python代码当然要追求简洁优雅,实际上真正的复合条件判断是可以写多个条件的,看到下面的示例,我们运行一下

n = 5
l = 2

if n > 0:
    print("n > 0")
elif l > 0:
    print("l > 0")
else:
    print("else run")

输出:n > 0

可以看到输出的结果是n > 0,而l > 0没有被输出,这说明这种if-elif-else复合条件判断是从上到下依次判断条件,当某一个条件成立时,进入该条件所属的块语句执行,而它之后的条件不会再去判断,直接忽视,所以当条件n > 0成立时,后面的elif l > 0:以及else语句就不会再被执行了。

我们更改一下代码,修改条件n > 10,再次验证我们的结论

n = 5
l = 2

if n > 10:
    print("n > 0")
elif l > 0:
    print("l > 0")
else:
    print("else run")

输出:l > 0

有一点需要注意,在ifelse之间,elif可以写多个,有几个条件就写几个elif,并不限制个数,但在elif之后,必须跟一个else结束,而else语句块会在其之前的多个条件没有一个成立时执行。

学习了更强的复合条件判断,那么就改进一下我们小游戏的代码吧

if num == 104:
    print("恭喜你,猜对了呢!")
    break
elif num > 104:
    print("你猜的数字大了呢!")
else:
    print("你猜的数字小了呢!")

2.2 灵活使用循环:控制循环次数

如果我们想要控制循环的次数,通常可以这样写

i = 0

while i < 10:
    print("i=",i)
    i += 1

这里我们让循环的条件i < 10,并且在每次循环的时候将i的值加1+=的用法前面章节已讲过,不再赘述,有一点需要说明的是print函数这次传了两个参数,实际上print函数是可以传入多个参数的,它会依次将传入的多个参数的值在同一行打印输出,并且会用空格间隔,这段代码结果如下,可以看到我们成功的控制循环执行了10次

i= 0
i= 1
i= 2
i= 3
i= 4
i= 5
i= 6
i= 7
i= 8
i= 9

前面已经说过,写Python代码要简洁优雅,这段控制循环次数的代码虽然很便于理解,但确实不怎么简洁,反而显得啰嗦,那有没有更简洁的写法呢?答案当然是有的,那就是使用Python的另一种循环语句,for循环,运行下面的代码

for i in range(10):
    print("i=", i)

输出:

i= 0
i= 1
i= 2
i= 3
i= 4
i= 5
i= 6
i= 7
i= 8
i= 9

对于for循环不太理解没关系,这里只是一个引子,以后还会再说。先简单解释一下,range这单词的意思是范围,区间,我们看到range后面有小括号,那么毫无疑问这里的range就是一个函数,这个函数里面传了一个参数10,那么就表示他会生成一个从0开始,小于10的整数数列,用数学里面的表示方法就是0 x &lt; 10 \leq x &lt; 10 ,in这个介词表示在……里,在……中,这里的代码我们光看英语其实就能明白大致意思了,就是表示每次按顺序从0~9这十个数字里面取一个数赋值给i变量,当i的值取到9这个数时,再后面就没有数了,循环也就退出了,从0到9,我们正好控制循环执行了10次。

Python的语法语义是很明确的,光看英语就很好理解,当然英语好的朋友看英语,英语不好的也没关系啦,总共就那几个简单的词,我都会解释清楚的,无需担心。

2.3 引入模块:打开潘多拉魔盒

Python语言之所以这么强大,一个原因就是因为我们可以去调用很多别人写好的工具代码,而不用我们自己去动手写。因此从这一节开始,我们就相当于打开了潘多拉魔盒,从此一发而不可收拾!

我们先从一个例子引入,前面一开始我们就说了把Python当计算器,那么我们现在需要一个开平方根的功能,该怎么做呢?

import math

result = math.sqrt(4)
print(result)

result = math.sqrt(16)
print(result)

result = math.sqrt(36)
print(result)

结果:

2.0
4.0
6.0

我们运行代码后可以看到结果,正是 4 16 36 \sqrt{ 4 }、\sqrt{ 16 }、\sqrt{ 36 } 的结果。

首先看到代码,sqrt()正是一个开平方根的函数,但是这个函数和我们之前调用的函数有一些不同,这个函数前面有一个math.,为什么会这样呢?这是因为在Python中,有一些函数可以在代码的任何地方都直接用函数名后面跟()的方式调用,比如之前用过的input()print()等,这种函数被称为内置函数,相当于被Python内置了。而sqrt()函数则不是内置的,我们必须首先引入包含这个函数的模块,也就是import math这句代码的用处。math正如其名,是一个数学模块,这个模块包含了很多数学计算相关的函数,当然不止sqrt()一个。

当我们引入了模块后,想要调用这个模块的函数,需要在模块名和函数名之间写一个英文句号,切记,是英文句号,千万不要写成中文的。这个小圆点符号在这里表示的意思。连起来读的意思就是:调用math模块的sqrt()函数

到这里,我们基本已经学会了引入模块调用函数的技能了,让我们总结一下步骤

  1. 引入对应的模块,使用import 模块名的方式,写在源码文件开头的行
  2. 使用模块名.函数名()的方式调用模块里面的函数。在这里我们可以简单把模块理解为小组的概念,就如同我们指名道姓的说是哪个小组的谁谁一样。

到这里,我们再学一个有趣的函数,用于改造我们之前的小游戏

import random

number = random.randint(0,10)
print(number)

我们反复将上面代码运行十次,发现每次输出的数字都不同,但是所有数字都是在0到10之间。这里代码中我们引入了random模块,这个单词的意思是随机的,然后我们调用了这个模块的randint()函数,传入了两个参数,其实randint()函数的作用就是随机返回一个整数,但是这个整数是有限制条件的,我们传入的两个参数正是表示一个区间,用数学的写法就是0 n 10 \leq n \leq 10 。这里我们每调一次randint()函数,它返回的整数结果都是随机的,可能一样也可能不一样,到这里我想大家都明白了,我们学会了这个函数,其实就可以做一个随机抽奖程序了。

2.4 实例:小游戏升级

我们上次写的小游戏还很粗糙,有很多不完善的地方,这次我们就一步步完善它。

先看到上次的核心代码,回顾一下

result = 104
while True:
    n = input("请猜一个数字:")
    num = int(n)

    if num == 104:
        print("恭喜你,猜对了呢!")
        break
    else:
        if num > 104:
            print("你猜的数字大了呢!")
        else:
            print("你猜的数字小了呢!")

改进代码

import random

random_number = random.randint(1,100)

while True:
    n = input("请猜一个数字:")
    num = int(n)

    if num == random_number:
        print("恭喜你,猜对了呢!")
        break
    elif num > random_number:
        print("你猜的数字大了呢!")
    else:
        print("你猜的数字小了呢!")

我们在第3行代码处生成一个1~100之间的随机整数,并保存到变量random_number中。运行代码,我们可以愉快的玩几把了,你需要猜几次才能猜中呢?玩猜数字游戏有一个诀窍就是下次猜一半,比如我们猜60,结果提示猜大了,那我们下次就猜30;如果猜60提示小了,那么我们下次就猜60/2 + 60,也就是90,依次类推,每次都增或者减一半,就能用最少的次数猜对结果!

虽然游戏得到了很大改进,但是我们没有限制玩游戏的次数,如果可以无限制的猜,总能猜对,那就失去了游戏的乐趣,因此我们要限制游戏次数,我们让玩家最多只能猜8次,8次都猜不对,那就对不起,游戏结束!

依照我们前面所讲的循环次数控制的方法修改代码

import random

random_number = random.randint(1,100)

i = 0
while i < 10:
    n = input("请猜一个数字:")
    num = int(n)

    if num == random_number:
        print("恭喜你,猜对了呢!")
        break
    elif num > random_number:
        print("你猜的数字大了呢!")
    else:
        print("你猜的数字小了呢!")

    i += 1

上面代码基本功能是实现了,但是代码略显啰嗦,那我们就使用for循环做最终版本的改造吧

import random

print("**********************************************")
print("************* 欢迎来到猜数字游戏 *************")
print("**********************************************")

random_number = random.randint(1,100)

for i in range(8)
    n = input("请猜一个数字:")
    num = int(n)

    if num == random_number:
        print("恭喜你,猜对了呢!")
        break
    elif num > random_number:
        print("你猜的数字大了呢!")
    else:
        print("你猜的数字小了呢!")


print("**********************************************")
print("***************** Game Over ******************")
print("**********************************************")

请关注公众号:编程之路从0到1

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yingshukun/article/details/86438889