通过游戏编程学Python(1)— 猜数字

通过游戏编程学Python(1)— 猜数字,第1张

通过游戏编程学Python

通过游戏编程学Python(1)— 猜数字


文章目录
  • 通过游戏编程学Python
  • 前言
  • 一、知识点
  • 二、第一个游戏 —— 猜数字
    • 1. 玩法简介
    • 2. 游戏流程
  • 三、程序代码
  • 三、代码详细分析
    • 1. import语句
    • 2.输入与输出
    • 3.While循环
    • 4.代码段
    • 5.变量类型转换
    • 6.判断语句与比较 *** 作符
    • 7.输出结果
  • 总结与思考


前言

很多人使用Python来编写游戏,然而问哥作为一个非专业选手,却是为了编写游戏而从零开始学习了Python。在这个过程中,临摹与研习别人的代码必不可少。其中的收获不可谓不丰,但也走了不少弯路,有时候为了搞懂其中某个知识点,需要四处搜索相关资料。于是问哥想把一些学习的经验总结并分享出来,一方面,可以巩固自己薄弱的编程功底,另一方面,如果同时能够帮助到同样零基础的你,那就再好不过了。

本系列文章使用Al Sweigart编写的《Python游戏编程快速上手》为教程,所以也可以说是一系列学习笔记。同时,为了易懂易记,我将代码中的注释和变量都换成了中文。笔记重点在代码分析,自然也略过了前面较为简单且基础的环境安装部分。如果问哥以后能够坚持写完本系列的话,再考虑补全这部分(笑)。

兴趣是最好的老师,愿我们学有所成。


一、知识点
  1. 模块的导入
  2. 输入与输出
  3. 缩进与代码块
  4. 基本变量类型及类型转换
  5. 流程控制语句while, if, break
二、第一个游戏 —— 猜数字 1. 玩法简介

电脑随机“想”一个数字(1到20之间的整数),玩家共有6次机会进行猜测。如果猜的数字比电脑的数字小,电脑提示“低了哦”,反之则提示“高了哦”。如果在6次以内猜中,则祝贺玩家并显示实际猜了几次。如果6次机会用完,电脑公布正确数字。

2. 游戏流程 三、程序代码

全部代码如下:

# 这是一个猜数字的游戏
import random

次数 = 0

print('你好,你叫什么名字?')
姓名 = input()

随机数 = random.randint(1, 20)
print('好的,' + 姓名 + ',猜猜看我想的数字是多少?提示:1到20之间的整数')

while 次数 < 6:
    print('猜猜看')	# 注意前面有4个空格,同一列的代码都处于while代码块
    数字 = input()
    数字 = int(数字)

    次数 = 次数 + 1

    if 数字 < 随机数:
        print('低了哦')	# 注意前面有8个空格,同一列的代码都处于if代码块

    if 数字 > 随机数:
        print('高了哦')

    if 数字 == 随机数:
        break

if 数字 == 随机数:
    次数 = str(次数)
    print('干得好,' + 姓名 + '!你用了' + 次数 + '次就猜对了!')

if 数字 != 随机数:
    随机数 = str(随机数)
    print('很遗憾,我想的数字是' + 随机数)

三、代码详细分析 1. import语句
# 这是一个猜数字的游戏
import random
随机数 = random.randint(1, 20)

Python有很多内置的函数可以直接调用,但是也有一些更为常用和强大的函数保存在某些外部模块文件中。当用到这些函数时,需要先使用import语句调用相应的模块。其实这些模块也是Python程序,系统自带的模块都可以在C:\Python安装目录\Lib\子文件夹下找到。

本例中需要随机生成一个整数,作为计算机“想”的数字。于是用到了random模块中的randint()函数。该函数接收两个参数(例子中为1和20),表示在1和20之间(包括1和20)随机得出一个数,然后赋值给一个名叫“随机数”的变量中。

有时候为了调用方便,我们也可以只导入某个模块中的特定函数,这样后面在使用函数的时候就不用指定模块名了。比如以下语句实现的效果与示例中相同,但不需要在函数randint前写出模块的名称random。

from random import randint
随机数 = randint(1, 20)
2.输入与输出

使用input()与print()函数可以向电脑输入信息,或将信息显示(打印)在屏幕上。这样就可以实现与电脑互动的效果。

print('你好,你叫什么名字?')
姓名 = input()

当运行这两条语句时,电脑会先在屏幕上显示字符串“你好,你叫什么名字?”,然后默认换行,再通过input()函数等待用户的键盘输入,并将用户输入的文本以字符串的形式赋值给变量“姓名”。

然后电脑使用“姓名”这个变量,打印出欢迎语句。

print('好的,' + 姓名 + ',猜猜看我的数字是多少?提示:1到20之间的整数')

这里的加号“+”用来拼接字符串,表示将前后的字符串(变量“姓名”的值也是字符串)连接在一起,形成一个新的字符串。

Python既可以使用双引号" ",也可以使用单引号’ '表示一串字符串,之所以如此,是为了方便在字符串中正常使用单双引号。如果字符串中既含有单引号,也含有双引号,则需要使用符号“\”将字符串中的引号转义。参考以下示例。

3.While循环

增加一个变量“次数”,用来计算玩家猜了多少次。然后使用While循环使玩家不停地猜。在游戏开始之前,“次数”为0。

次数 = 0
while 次数 < 6:
	# 省略部分代码
    次数 = 次数 + 1

上面语句中当(While)次数小于6的时候,冒号(:)后面同一代码块的语句会反复执行。注意:必须在代码块中改变变量“次数”的值,不然“次数”永远为0,程序也将会陷入死循环。该代码中,每循环一次(用户猜一次数字),“次数”变量的值加1。

变量自身进行数学运算,再赋值给自身的 *** 作可以使用简化写法。比如上面的赋值语句可以简写如下:

	次数 += 1

其他数学运算符号同理。

4.代码段

Python使用缩进来标记代码所在的段落。连续、同一缩进的语句为一个代码段。默认使用4个空格,或Tab来缩进。

while 次数 < 6:
    print('猜猜看')
    数字 = input()
    数字 = int(数字)

    次数 = 次数 + 1

    if 数字 < 随机数:
        print('低了哦')

    if 数字 > 随机数:
        print('高了哦')

    if 数字 == 随机数:
        break

本例中while语句后面所有循环体的语句均缩进4个空格,表示包括if语句在内的所有语句均属于while代码段。而if语句后面缩进了8个空格,以表示这些语句属于if代码段。

在IDE以及各种编程环境(Pycharm,VSCode等)中,电脑会在循环、判断、函数、类等语句后面自动缩进代码段,所以大部分情况下无须担心。但仍需小心检查某些语句属于哪个代码段,以免造成逻辑错误。

5.变量类型转换

游戏开始后,电脑在屏幕中显示“猜猜看”,然后使用input()等待用户输入一个整数,以字符串的形式赋值给变量“数字”。但是后面要用该整数与电脑得到的随机数进行比较大小,而字符串是不能直接与数字比较大小的,于是使用int()函数将用户输入的字符串整数转换为整数类型。

while 次数 < 6:
    print('猜猜看')
    数字 = input()
    数字 = int(数字)
    次数 = 次数 + 1

在程序的后半部分,需要进行拼接字符串 *** 作的时候,同样又使用了另一个类型转换函数str()将整数转换成了字符串。

    次数 = str(次数)
    随机数 = str(随机数)

这里也可以发现,Python中同一变量的类型可以自由变化,在某些时候保存的是整数,在需要的时候,又可以改变类型,保存字符串。原因是Python的变量中保存的其实是实际数值的内存地址,至于那个地址里保存的是整数还是字符串还是其他类型,变量自身不做限制。可以随时通过赋值语句“=”改变变量中保存的内存地址,从而指向不同的数据类型。

6.判断语句与比较 *** 作符

为了判断用户猜的数字(储存在变量“数字”中)是否就是电脑产生的“随机数”,使用了三条if判断语句,依次判断数字是否小于、大于、等于随机数:

    if 数字 < 随机数:
        print('低了哦')

    if 数字 > 随机数:
        print('高了哦')

    if 数字 == 随机数:
        break

但是上面语句即使满足了第一个条件,还是会继续比下去,显然没有意义。所以其实可以转换为以下if…elif…else的格式,在本例中实现的功能相同。

    if 数字 < 随机数:
        print('低了哦')

    elif 数字 > 随机数:
        print('高了哦')

    else:
        break

当猜中正确的数字(“数字”等于“随机数”)时,程序使用了break语句跳出while循环,即不用再循环到“次数”为0,即可继续执行while后面的语句。

在while和if关键字后面使用了比较运算符连接的表达式。比较运算符共有6种。

比较符意义
>大于
<小于
==等于
>=大于等于
<=小于等于
!=不等于

如果等式成立,则返回一个布尔(Bool)类型的True,反之返回False。

换句话说,while和if其实是判断后面的比较运算式返回的结果是True还是False。如果是True,则继续向下运行,反之则跳过。

7.输出结果

当玩家猜中数字、或猜错次数达到6次后,程序自动跳出循环,继续执行后面的语句。并通过比较“数字”与“随机数”(运算符==或!=),判断玩家是否猜对,再执行相应的代码,拼接字符串以显示不同的结果。

if 数字 == 随机数:
    次数 = str(次数)
    print('干得好,' + 姓名 + '!你用了' + 次数 + '次就猜对了!')

if 数字 != 随机数:
    随机数 = str(随机数)
    print('很遗憾,我的数字是' + 随机数)

总结与思考

通过一个简单的游戏,我们学习了Python编程的一些基本语句和规范,如代码块、字符串拼接、比较运算符、变量的类型转换等等。

Python本身的编程哲学也是追求简洁易懂,所以很多语句比如while循环、if判断都可以直接读出意思。而放在游戏中,我们更要考虑的是如何实现游戏的过程。当读到他人的代码时,借鉴别人如果简洁高效地实现我们想要的效果,这一点尤为重要。

当然,也许出于教学的目的,一些程序还留有很大的优化空间,以及潜在的bug。大家可以想一想,有没有更简洁的代码可以实现本例中的猜数字的游戏呢?

另外,示范代码并没有对用户猜的数字进行格式上的要求,而是默认用户会“听话”地输入1到20的整数。而如果用户输入的不是整数,而是其他类型的文本,比如小数、中文数字,甚至是任意的字符串,程序都是报错并退出。原因便是其中用到的int()函数无法应用到除了整数型之外的字符串类型上。我们怎样才能在输入的时候加上一个判断语句,来辨别出这些“非法”字符,并要求用户重新输入呢?

这些都是值得思考的,我们可以带着问题继续学习,相信有一天,我们一定可以写出更加完美、好玩的游戏。

下次再见!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/719100.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存