通过游戏编程学Python(2)— 脑筋急转弯

本文介绍了通过编程创建脑筋急转弯游戏来学习Python的基本概念,包括input()函数的使用、字符串转义、多行字符串和print()函数的end参数。作者强调了学习编程的兴趣驱动和实用性,旨在让初学者逐步理解编程的简易性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过游戏编程学Python

通过游戏编程学Python(2)— 脑筋急转弯
通过游戏编程学Python(1)— 猜数字



前言

大家好,上节课我们囫囵吞枣般地完成了第一个小游戏的创作,不知道大家有没有亲自动手把代码抄写一遍试试呢?虽然游戏很简单,甚至可以说是有点无聊,但其中涉及到的编程知识点并不少。然而,我们却并没有对每个知识点进行旁征博引般地讲解。问哥这样做的原因有二:1,这套学习笔记的目标读者是初学者,而很多人在入门的时候还是以兴趣为主,如果能够实际动手敲上几行代码,看到效果在自己眼前实现,已经是进步了,需要及时地自我鼓励,而过深的讲解反而会劝退很多人;2,很多时候我们实现某些功能,也并不需要知道多么深的计算机科学知识,只要了解必要的功能就足够了,这也是Python所提倡的“简洁、优雅”,就好像制作冰激凌并不需要知道冰箱是怎么工作的,抓住个别知识点耗费过多精力去了解许多并不常用的功能,在现阶段有点吃力不讨好。归根究底,问哥是想让更多人,更多非计算机专业的人(比如.问哥自己),了解到编程并不是什么神秘的事情。而一旦了解了编程、实际动手做几个小程序以后,大家在生活或工作中遇到类似的功能自然会想到,用程序来实现会不会更加便捷。这对提高自己的生活或工作质量的确是很有帮助的。

在该系列后面的笔记里,问哥也会尽量以初学者的角度,去思考每一个项目如何实现,再同时添加进新的知识点,与大家共同进步!


一、知识点

  1. 空的input()函数
  2. 字符串转义
  3. print()函数的end可选参数

二、第二个游戏 —— 脑筋急转弯

1. 玩法简介

《Python游戏编程快速上手》里这一章叫做“Jokes”,问哥这里将它本地化,于是变成了“脑筋急转弯”,但核心内容是没有变化的,甚至是一样无聊的:通过按回车键,由电脑依次读出每个脑筋急转弯,再回车,显示答案,如此反复。

2. 游戏流程

Created with Raphaël 2.3.0 游戏开始 问题 答案

三、程序代码

全部代码如下:

print('有一个老太太上了公交汽车。为什么没有人让座?')
input()
print('因为车上还有空座。')
input()
print('一天,有两人在马路上走着,一人说“你看前面有辆车”,另一个人却说“没车”。为什么?')
input()
print("因为那是一辆'煤'车。")
input()
print('小狗怎么才能一下子变大呢?')
input()
print('把"犬"上的点去掉。')
input()
print("有一只小白猫掉进河里了,一只小黑猫把它救了上来,请问:小白猫上岸后的第一句话是什么?")
input()
print("小白猫说:\"喵。\"")
input()
print('''一个聋哑人到五金商店买钉子,他把左手的食指和中指分开做成夹着钉子的样子,
然后伸出右手作锤子状。服务员给他拿出锤子,他摇了摇头,给他拿来钉子,他满意地买了。
接着来了一个盲人,请问,他怎样才能买到剪子?''')
input()
print("盲人会说话,直接告诉服务员。")
print('''树有心眼,西下美女,手扶下巴,人在尔边,心死相依,言及自己,
十件家具,白色勺子,儿女双全,又住一起''', end='')
input()
print('这是哪句歌词?')
input()
print('想要把你忘记真的好难。')

四、代码详细分析

1. 空的input()函数

大家还记得上节课里说过input()是一个玩家向计算机输入指令的函数,而print()是电脑向玩家输出/打印/显示信息的函数。在上节课的例子里我们用一个变量,将用户从键盘输入的任何信息以字符串的形式保存在其中。

# 用户键盘输入任意字符,保存在变量“姓名”中
姓名 = input()
# 用户键盘输入任意字符(游戏中先通过print暗示用户输入一个整数)
print('猜猜看')
数字 = input()

这里电脑将input()获得的信息保存在变量之中,是为了在后面的程序里根据该信息作进一步的处理和判断,根据不同的信息显示不同的结果,从而实现一定的人机交互。

而input()这个函数实际上并不要求一定要有变量接收,比如:

print('小狗怎么才能一下子变大呢?')
input()

本例中程序运行到input()时光标会停在那里等待用户输入,而当用户输入任何信息按下回车,甚至什么也不输入,只是按下回车后,程序将不做任何处理,继续执行后面的语句。实际上,在这里,input()实现的仅仅类似一个“大喘气”的效果。让程序暂停一下,等待用户按下回车后继续。

2.字符串转义

上节课我们提到过Python既可以使用双引号" ",也可以使用单引号’ '表示一串字符串,但是如果字符串中需要使用双引号,则两边只能使用单引号,反之亦然。

print("因为那是一辆'煤'车。")
print('把"犬"上的点去掉。')

如果遇到必须同时表示单引号和双引号的字符串,就必须使用转义符了。参考以下示例。
在这里插入图片描述
Python定义的转义符有很多,常用的一些如下表所示。当在字符串中出现以下组合时("\"加上一个字母或符号),Python默认会执行它的特殊意义(这也是为什么其被称为“转义符”)。

转义字符实际显示的内容
\n回车或换行
\t制表符,等同于Tab
\’单引号
\"双引号
\\反斜杠

所以当我们需要在一对单(双)引号括起来的字符串里正确显示/打印出单(双)引号的时候,使用转义符是最简便的方法(当然还有其他方法,我们以后会介绍)。仔细观察一下本节课使用的例子:

print("小白猫说:\"喵。\"")

3.多行字符串

当我们需要一次性输入很多字符串,并不想使用多条print()语句,却想要它们在屏幕上分段显示的时候,我们可以使用刚刚介绍过的 \n 换行转义符。

print('一个聋哑人到五金商店买钉子,他把左手的食指和中指分开做成夹着钉子的样子,\n然后伸出右手作锤子状。服务员给他拿出锤子,他摇了摇头,给他拿来钉子,他满意地买了。\n接着来了一个盲人,请问,他怎样才能买到剪子?')

这样,当Python执行这条命令时,\n会被当做一个回车/换行,显示效果如下:
在这里插入图片描述
但是这样程序却写得很长(你也注意到,需要拉动滚动条才能看到右边写了什么),于是Python提供了另一种方法:使用左右三个单引号将一串字符串括起来。这样就可以在写程序的时候将字符串中任意换行了,如下的写法显示效果与上面的例子相同。

print('''一个聋哑人到五金商店买钉子,他把左手的食指和中指分开做成夹着钉子的样子,
然后伸出右手作锤子状。服务员给他拿出锤子,他摇了摇头,给他拿来钉子,他满意地买了。
接着来了一个盲人,请问,他怎样才能买到剪子?''')

这种三个单引号的使用方法也引申出了另一种用法:注释

上节课我们也介绍过,Python程序执行的时候,跟在"#“后面的字符将会被忽略,所以我们可以利用这个特点为程序添加注释,也可以在暂时不需要某条语句、却又不想删除的时候,在前面加个”#“将其注释掉,不再执行。但是”#"的作用范围仅仅一行,于是当我们需要注释掉很多语句的时候就会显得非常麻烦。

这个时候我们可以曲线救国,使用三个单引号,将不需要的一大段语句括起来。这样,这段内容将会被程序当成一个多行字符串,但是因为没有赋值(“=”)或打印(print())等操作,所以实际的效果就相当于“没有被执行”,如此一来,也就等同于注释了多行语句。

4.print()函数的end参数

不知大家有没有注意到倒数第三个print()语句,我们除了使用多行字符串以外,还在print()的括号里增加了一个值为空的end参数。

print('''树有心眼,西下美女,手扶下巴,人在尔边,心死相依,言及自己,
十件家具,白色勺子,儿女双全,又住一起''', end='')

print()函数会在屏幕上将括号里的内容显示出来,然后默认在最后一个字符的后面添加换行。但是如果指定了end=’ ‘,Python会在print()内容输出以后,跟上end=’ ‘引号里指定的内容,且不换行(实际上,如果没有指定end,相当于end=’\n’,请读者体会一下)。在需要某些特殊显示的时候,比如重复调用函数,将某些字符串连续地在同一行显示(而不是换行),就可以使用end参数,如下例:
在这里插入图片描述
这在后面的程序里也会用到,到时候我们再详细解释。


总结与思考

这节课的知识点相对比较少,也比较基础。同时问哥也在想,较少的内容也许更能够为初学者所接受,但同时却又舍弃了一些“完成了一个完整程序”的成就感。当后面介绍到稍微复杂一点的程序的时候,可能不得不将一个程序示例进行拆分,在多篇文章中连载。而问哥会尽可能在“冗长”与“成就感”之间做一个平衡,也欢迎各位朋友在评论区提出改进意见。

本章的内容十分简单,你也可以将输入的脑筋急转弯换成其他笑话、故事、歇后语等有趣的内容,也可以放入无限多的内容,程序会一直按顺序执行(伴随着用户的回车键),直到所有内容都被显示。那么可以进一步思考一下,如何在这样简单的代码中添加一些代码,把计算机变成一个故事大王,在我们需要的时候,随机抽取若干条笑话或故事,供我们消遣呢?感兴趣的朋友不妨思考一下。

我们下次再见咯~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我问哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值