课时4:改进我们的小游戏
目录:
一、改进我们的小游戏
二、条件分支
三、while循环
四、引入外援
五、课时04课后习题及答案
**************************
一、改进我们的小游戏
**************************
很多鱼油对改善这个游戏提出了建议,小甲鱼做了一下总结,大概有以下几个方面需要改进:
>猜错的时候程序应该给点提示,例如告诉用户输入的值是大了还是小了。
>每运行一次程序只能猜一次,应该提供多次机会给用户猜测。
>每次运行程序,答案可以是随机的。因为程序答案固定,容易导致答案外泄。
****************
二、条件分支
****************
第一个改进要求:猜错的时候程序提示用户当前的输入比答案大了还是小了。
例如:
1 >>> 1<3 2 True 3 >>> 1 < 3 4 True 5 >>> 1 <= 3 6 True 7 >>> 1 == 3 8 False 9 >>> 1 != 3 10 True
这里1和3进行比较,判断1是否小于3,在小于号左右分别留了一个空格,这不是必需的,但是代码量一多,看上去会美观很多。
Python的条件分支语法:
****************
三、while循环
****************
第二个改进要求:程序应该提供多次机会给用户猜测,专业点来讲就是程序需要重复运行某些代码。
temp =input("不妨猜一下小甲鱼现在心里想的是哪个数字:") guess = int(temp) while guess!=8:temp = input("猜错了哦,重新猜一猜:")guess = int(temp)if guess == 8:print("哇草,你是小甲鱼心里的蛔虫吗?")print("哼,猜中了也没有奖励")else:if guess > 8:print("哥,大了大了~~")else:print("嘿,小了!小了!!") print("游戏结束,不玩啦~~")
说一说自己对这一段代码的理解:while循环条件为假的话,运行最后一行的代码。为真的话运行while循环里缩进的内容。值得一提的是,循环体内if-else的guess变量是重新赋值了的。
运用了if-else的嵌套结构。看代码时首先把大的缩进代码区域判断清楚,在判断好每个小的缩进代码区域,这样有便于理清思路。
这里的代码好像跟第2个要求有点不同,后面会进行完善。这里我们给大家的提示是:使用and逻辑操作符Python的and逻辑操作符可以将任意表达式连接在一起,并得到一个布尔类型的值。
****************
四、引入外援
****************
第三个改进要求:每次运行程序产生的答案是随机的。
我们需要引入外援:random模块
这个random模块里边有一个函数叫做:randint(),Ta会返回一个随机的整数。
我们可以利用这个函数来改造我们的游戏!
import randomsecret = random.randint(1,10) temp =input("不妨猜一下小甲鱼现在心里想的是哪个数字:") guess = int(temp)while guess!=secret:temp = input("猜错了哦,重新猜一猜:")guess = int(temp)if guess > secret:print("哥,大了大了~~")else:print("嘿,小了!小了!!")if guess == secret:print("哇草,你是小甲鱼心里的蛔虫吗?")print("哼,猜中了也没有奖励")print("游戏结束,不玩啦~~")
*******************************
五、课时04课后习题及答案
*******************************
测试题:
0. 请问以下代码会打印多少次“我爱鱼C!”
while 'C': print('我爱鱼C!')
1.请问以下代码会打印多少次“我爱鱼C!”
i = 10 while i: print('我爱鱼C!') i = i - 1
每经过循环体一次,循环体内的i减去1,因而i-=1写在print语句前和语句后都一样!
2.请写出与10 < cost < 50等价的表达式
3.Python3中,一行可以书写多个语句吗?
4.Python3中,一个语句可以分成多行书写吗?
5.请问Python的and操作符和C语言的&&操作符有何不同?
6.听说过“短路逻辑(short-circuitlogic)”吗?
动动手:
0. 完善第二个改进要求(为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环)并改进视频中小甲鱼的代码。
1.尝试写代码实现以下截图功能:
2.尝试写代码实现以下截图功能:
答案:
测试题:
0. 请问以下代码会打印多少次“我爱鱼C!”
死循环,会一直打印“我爱鱼C!”(嗯,这也算是永远支持鱼C的方法之一),直到崩溃或者用户按下快捷键 CTRL + C(强制结束)
造成死循环的原因是 while 后边的条件永远为真(True),在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}
其他一切都被解释为真!
不妨试试:
while '':print('进入循环') print('退出循环')
while Flase:print('进入循环') print('退出循环')
或者:
while 0:print('进入循环') print('退出循环')
1.请问以下代码会打印多少次“我爱鱼C!”
10次,每次循环i减1,10次后i=0,while语句不成立,停止打印。
2.请写出与10 < cost < 50等价的表达式
(cost > 10) and (cost < 50)
3.Python3中,一行可以书写多个语句吗?
可以。如果有括号(小括号{}、中括号[]、大括号()),可以在任意地方断行。如果没有,需要在断开的地方添加 \
字符,表示这一行尚未结束。例如:
>>> d={1,2} >>> d {1, 2} >>> print(d) {1, 2} >>> a=1;b=2 >>> c=a+\b >>> c 3
一行过长的语句可以使用反斜杠或者括号分解成几行,不妨试试
>>> 3 < 4 and 1 < 2 True >>> 3 < 4 and \1 < 2 True >>> (3 <4 and1 < 2) True
4.Python3中,一个语句可以分成多行书写吗?
可以。
5.请问Python的and操作符和C语言的&&操作符有何不同?
and 布尔”与” ——如果a
为False
,(a and b)
返回False
,否则它返回b
的计算值。
or 布尔”或” —— 如果a
是True
,(a or b)
返回True
,否则它返回b
的计算值。
not 布尔”非” —— 如果a
为True
,not a
返回False
。如果a
为False
,not a
返回True
。
在C中,0&&3 = 0
,1&&3 = 1
。在python中,,0 and 3 = 0,1 and 3 = 3。
>>> 0 and 3 0 >>> 1 and 3 3 >>> 1 or 3 1 >>> 0 or 3 3
6.听说过“短路逻辑(short-circuitlogic)”吗?
逻辑操作符有个有趣的特性:在不需要求值的时候不进行操作。举个例子,表达式 a and b,需要 a 和 b 两个变量同时为真(True)的时候,结果才为真。 因此,如果当 a 变量得知是假(False)的时候,表达式就会立刻返回 False,而不用去管 b 变量的值。 这种行为被称为短路逻辑(short-circuit logic)或者惰性求值(lazy evaluation) 这种行为同样也应用与 or 操作符。
值得注意的是 0 代表的是False。and式子是同真为真,or式子是有真为真。
也就是说,判断式子是否为真,and 式子中a都为false了,还管b干嘛,无论它是真是假,and式子都为假了。or式子中a都为true了,还管b干嘛,无论它是真是假,or式子都为真了。
动动手:
0. 完善第二个改进要求(为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环)并改进视频中小甲鱼的代码。
import random secret = random.randint(1,10) i = 3 temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:") number = int(temp) while i > -1: #并不意味着在这里 i=0 时,判断语句就会为False;单独写个 while 0: 才是False。if number == secret:print("哇草,你是小甲鱼心里的蛔虫吗?")print("哼,猜中了也没有奖励")breakelse: if number < secret:print("小了小了")else:print("大了大了")#次数的判断 就可以用if-else语句!!! if i != 0:temp = input("请重新猜,还有"+ str(i) +"机会:")number = int(temp)else:print("三次机会已用完,游戏结束")i = i - 1 #为什么i>-1 因为i=1 时还要有一次机会,这里执行了i-1 此时i等于0 要使判断语句为True。
!!!! if 不是循环体!!!!!
以下是大佬提供的简化版本,学习了。
import random secret = random.randint(1,10) i = 3 number = int(input("不妨猜一下小甲鱼现在心里想的是哪个数字:")) while i > -1:if number == secret:print("哇草,你是小甲鱼心里的蛔虫吗?\n哼,猜中了也没有奖励")breakelse:print("小了小了") if number < secret else print("大了大了")number = int(input("请重新猜,还有"+ str(i) +"机会:")) if i != 0 else print("三次机会已用完,游戏结束")i -= 1
使用了三元运算符和自运算等等的简化版本。
最好少用三元运算符,因为这是个不好的习惯,这会导致你的代码可读性极差。
以下是小甲鱼的代码!
import random times = 3 secret = random.randint(1,10) print('------------------我爱鱼C工作室------------------') # 这里先给guess赋值(赋一个绝对不等于secret的值) guess = 0 # print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行! # 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"? print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ") while (guess != secret) and (times > 0):# 先前定义guess为0 有此妙用 直接可以输入一次数字。将接下来两行代码纳入循环体系,减少了代码量。temp = input() #因为end=“ ” 所以在print输出到屏幕的语句后面直接输入guess = int(temp)times = times - 1 # 用户每输入一次,可用机会就-1if guess == secret:print("我草,你是小甲鱼心里的蛔虫吗?!")print("哼,猜中了也没有奖励!")else:if guess > secret:print("哥,大了大了~~~")else:print("嘿,小了,小了~~~")if times > 0:print("再试一次吧:", end=" ")else:print("机会用光咯T_T") print("游戏结束,不玩啦^_^")
值得学习的思维方式有两点:其一 在while循环外用print,并用了end,循环体内用了input(),后面的代码print("再试一次",end" "),与input很好的切合,以便于在用户输入数字前可以写不同的说明语句。其二 while判断语句中 and的用法 同时结合了guess等于0 这一妙用。其实这里不必要用and也可以实现。总有条件下可以用到的,学到啦!!
通过实践证明,在if-else中,先判断输入是否一样,会方便许多。
1. 尝试写代码实现以下截图功能:
temp = input('请输入一个整数:') number = int(temp) i = 1 while number:print(i)i = i + 1number = number - 1
2. 尝试写代码实现以下截图功能:
temp = input('请输入一个整数:') number = int(temp) while number:i = number - 1while i:print(' ', end = '')i = i - 1j = numberwhile j:print('*', end = '')j = j - 1print()number = number - 1
谈一谈我对这一段程序的理解:先观察最终实现的效果图,结合代码,很清楚的知道,3个循环体分别代表的含义,外循环表明有多少行,内循环,一个循环打出空格,一个循环打出*(星号),各个循环自成一体,所以都会有类似于 i -= 1的代码,以便终止当前循环。而end = " ",因为空格和*是一个一个循环打出的,所以是避免换行。而两次内循环的结束,print()语句实现了换行。
简化版本:
temp = input("输入一个数字:") number = int(temp) while number:print(" "*(number-1) + "*"*number)number -= 1
补充:
称述:在写程序的时候,不小心将 -=写成了 =- 因而程序并没有得到想要的结果,过后我查阅了相关的资料,可以借鉴这一网址:网址(多看两遍就明白了)
>>> a = 2 >>> b = a >>> id(a) 140728562340928 >>> id(b) 140728562340928 >>> a = a + 3 >>> id(a) 140728562341024 >>> id(b) 140728562340928>>> c = 5 >>> d = 5 >>> id(c) 140728562341024 >>> id(d) 140728562341024 >>> c += 1 >>> id(c) 140728562341056 >>> id(d) 140728562341024
这一部分首先要理解python内存机制,Python中万物皆对象。
对于不可变对象,改变了原来的值,其别名(变量名)绑定到了新值上面,id肯定会改变
>>> aa = [3,4,5] >>> bb = aa >>> id(aa) 3007589114056 >>> id(bb) 3007589114056 >>> aa = aa + [10] >>> id(aa) 3007588801672 >>> id(bb) 3007589114056 >>> aa [3, 4, 5, 10] >>> bb [3, 4, 5] 对于可变对象,+ 操作改变了值,id肯定会变,而+= 是本地操作,其值原地修改 >>> aa = [3,4,5]>>> bb = aa>>> id(aa)1985188852296>>> id(bb)1985188852296>>> aa += [10]>>> aa[3, 4, 5, 10]>>> bb[3, 4, 5, 10]>>> id(aa)1985188852296>>> id(bb)1985188852296
>>> cc = [2,3,4] >>> dd = [2,3,4] >>> id(cc) 3007586184840 >>> id(dd) 3007589046728 >>> cc += [0] >>> cc [2, 3, 4, 0] >>> id(cc) 3007586184840 >>> dd = dd + [0] >>> dd [2, 3, 4, 0] >>> id(dd) 3007589105160
对于+号操作,可变对象和不可变对象调用的都是__add__操作
对于+=号操作,可变对象调用__add__,不可变对象调用的是__iadd__(不可变对象没有__iadd__) __iadd__是原地修改
总结一下:对于不可变的对象,例如数字啥的,你用 a = a + 10,亦或者用 a += 10的形式 其id值都会发生改变。而对于可变的对象,例如列表之类的,这里有另种情况要讨论,<1>aa = bb的前提下,aa 和bb的id是相同的,用 aa = aa + [10] 的形式只会改变aa的id,bb的id还是原来的id,不会改变;倘若用aa += [10]的形式,aa和bb的值会同时发生改变,但aa和bb的id还是原来的味道,不会改变!!!<2>cc = [2,3,4] dd = [2,3,4]的前提下,虽然两者的值相同,但是他俩的id是不同的,不同的!!!不明白的看看上面的例子就懂了。好绕,多看两遍就记在心中了,emmm。脑阔痛。
转载于:https://www.cnblogs.com/DC0307/p/9361799.html
课时4:改进我们的小游戏相关推荐
- 改进Python文字小游戏(4)
前面,我们讲了变量和字符串的一些种类.朋友们,还记得我们之前的那个智障的文字小游戏吗?今天,我们要做的第一件事就是来改进我们的文字小游戏,至于第二件事嘛,先让我卖个关子,众位客官,注意咯! 1)首先, ...
- python实现文字游戏_改进Python文字小游戏(4)
前面,我们讲了变量和字符串的一些种类.朋友们,还记得我们之前的那个智障的文字小游戏吗?今天,我们要做的第一件事就是来改进我们的文字小游戏,至于第二件事嘛,先让我卖个关子,众位客官,注意咯! 1)首先, ...
- Python3-小甲鱼教程 【课后作业及答案】004改进我们的小游戏
测试题: 0. 请问以下代码会打印多少次"我爱鱼C!" 1. while 'C': 2. print('我爱鱼C!') 解:无限次,因为自动判断条件为真,会无限循环 1. ...
- FishC《零基础学习python》笔记--第004讲:改进我们的小游戏
测试题: 请问以下代码会打印多少次"我爱鱼C!" while 'C': print('我爱鱼C!') 死循环 请问以下代码会打印多少次"我爱鱼C!" i = 1 ...
- 改进后的速算小游戏(2011211909 苟玲、2011211933 郝怡然)
1.开发环境: Visual C++ 6.0 使用C语言编写 2.功能说明: 该游戏是几个小游戏的结合体,主要是针对小学生的速算练习.其改进之处在于在普通的速算程序的基础上添加了几个小游戏,在进 ...
- JAVA扫雷小游戏(待改进)
扫雷(待改进) 自从学习Java之后,就觉得Java比我原先学了这么久的C要难上不少 Designed by Rossi 最近看了不少Java开发的小项目例子,于是游戏成瘾的我心血来潮想写个小游戏 扫 ...
- labview2048小游戏详细解析+改进
这个账号我的新开的一个CSDN账号,以后就要坚持在这里把自己平时用到的学到的都更新到这里,这次先把我另一个账号中的文章转载过来.反正都是我原创的. _____________ 最近因为实验室需要,需要 ...
- 2048小游戏及改进
寒假在家闲来无事,想要自己搞一个2048的小游戏,就在网上搜了一下,搜到了大佬的程序,就自己一遍参考一遍自己摸索,将代码实现了起来,能够真正的运行出来游戏界面,并且游戏感觉良好. 但是玩了几次之后,发 ...
- android实现猜扑克牌小游戏(改进:每次只可以选择一张)
android实现猜扑克牌小游戏 项目目录 实现效果 XML代码如下 <?xml version="1.0" encoding="utf-8"?> ...
最新文章
- linux终端安装playonlinux,Ubuntu安装PlayOnlinux
- 老板说“我们要做个性化推荐”时,你该怎么办......
- unix环境高级编程基础知识之第二篇(3)
- php phpmailer qq邮箱,QQ邮箱利用PHPmailer发送邮件
- javadocs_不会吸引人的JavaDocs源样本
- 模块的封装之C语言类的继承和派生
- 智能设备破解的那些事儿
- iOS 8.0正式公布啦
- 51单片机LCD1602程序详解
- linux 内核代码阅读工具,linux内核源码阅读工具
- matlab画EBSD的极图,EBSD技术原理及系统.PDF
- 计算机基础证和PS证,全国计算机等级PHOTOSHOP一级证书
- python做问卷调查赚钱的软件_在网上做调查问卷能挣钱吗?靠谱吗
- 对称矩阵特征向量正交推导
- LaTeX字符加的各种帽子
- 一些好听的纯音乐及下载
- 3d打印技术应用实例_3D打印(工作,优势和应用)
- 微信支付 公众号关联商户号
- 阿里巴巴Java开发手册 (Alibaba Java Coding Guidelines)
- C++实现二维离散傅里叶变换
热门文章
- 梯度下降算法_五分钟读懂梯度下降算法
- 《密码爆破漏洞详解》——黑客必修的入门操作( 建议收藏 )
- iptables防火墙工作原理及简单配置访问策略
- 用户文件夹安全权限设置只能复制即上传不能删除和修改名称和修改数据或写入数据等
- Linux中搭建YUM
- 30秒的PHP代码片段(1)数组 - Array
- 【git】Git 提示fatal: remote origin already exists 错误解决办法
- hacker基础教程
- 【云和恩墨大讲堂】从执行计划洞察ORACLE优化器的“小聪明”
- cacti监控 磁盘I/O