一、摘要

当编写完后的代码执行第一次后达到了目标的预期效果,内心有些许满足,但是当突发情况产生后,程序便不能正常运行,于是准备从简单的版本开始出发,综合考虑使用者的需求,和使用过程中会遇到的问题,一步一步发现和解决问题,最终编写成目前自己满意的程序,由于目前知识有限,欢迎大家提出宝贵的建议。

二、游戏规则

下面我们通过一个“猜数字”的小游戏来看看如何使用while循环。猜数字游戏的规则是:计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。

三、简易版程序

1、代码

点击查看代码
#猜数字游戏
import random
Ai = random.randint(1, 100)
co = 0
while True:
co += 1
num = int(input('请输入: '))
if Ai > num:
print('大一点')
elif Ai < num:
print('小一点')
else:
print('恭喜你猜对了!')
break
print(f'你总共猜了{co}次')
if co > 7:
print('你的智商余额明显不足')

2、问题:

用户如果输入非整数,程序将会报错,游戏无法继续

四、改版1

1、解决:

通过if判断和break语句解决用户误输入非整数类型的报错

点击查看代码
import random
Ai = random.randint(1, 100)
co = 0
a = input('接下来我们将开始猜数字游戏,Are you ready! y/n: ')
if a == 'y':
while True:
co += 1
num = int(input('请输入: '))
if Ai > num:
print('大一点')
elif Ai < num:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了{co}次')
if co > 7:
print('你的智商余额明显不足')
elif a == 'n':
print('程序运行结束')
else:
print('输入无效,程序终止')

2、问题:

通过解决了用户误输入报错的问题,程序基本正常运行,也提升了用户和程序的交互性。但是又发现了新的问题,用户交互性不够好,程序只能运行一次就自动结束。

五、改版2

1、解决:

通过嵌套if语句使得while语句内部的程序可以多次运行,为了避免if语句内部用户误输入再次报错,再使用while嵌套一层,然后使用break避免该结束的语句重复运行

点击查看代码
import random
Ai = random.randint(1,100)
a = input('接下来我们将开始猜数字游戏,Are you ready! y/n: ')
while True:
if a == 'y':
co = 0
while True:
num = int(input('请输入一个1-100之间的数字:'))
co +=1
if Ai > num:
print('你输入的数字小了')
elif Ai < num:
print('你输入的数字大了')
elif Ai == num:
if co < 7:
print(f'恭喜你猜对了!你一共用了{co}次,实在优秀')
a = input('请问是否继续游戏y/n: ')
if a == 'n':
break
else:
print(f'恭喜你猜对了!但是你一共用了{co}次,很遗憾的告诉你,你的智商余额明显不足')
a = input('请问是否继续游戏y/n: ')
if a == 'n':
break
else:
print('你输入的是无效的数字,程序自动终止')
break
elif a == 'n':
print('程序运行结束')
break
else:
print('输入无效,程序终止')
break

2、问题:

现在基本解决了用户误输入报错和交互性的问题,可以多次正常运行了,可是运行多次后发现程序提示用户输入次数是开始到程序结束的次数,但是预期希望的是每一次开始都是重新计算次数

六、改版三

1、解决:

通过每次重新开始都给co这个变量赋值为0,这样就解决了程序每次开始不重新计数的问题了

点击查看代码
import random
Ai = random.randint(1,100)
a = input('接下来我们将开始猜数字游戏,Are you ready! y/n: ')
while True:
if a == 'y':
co = 0
while True:
num = int(input('请输入一个1-100之间的数字:'))
co +=1
if Ai > num:
print('你输入的数字小了')
elif Ai < num:
print('你输入的数字大了')
elif Ai == num:
if co < 7:
print(f'恭喜你猜对了!你一共用了{co}次,实在优秀')
a = input('请问是否继续游戏y/n: ')
co = 0
if a == 'n':
break
else:
print(f'恭喜你猜对了!但是你一共用了{co}次,很遗憾的告诉你,你的智商余额明显不足')
a = input('请问是否继续游戏y/n: ')
co = 0
if a == 'n':
break
else:
print('你输入的是无效的数字,程序自动终止')
break
elif a == 'n':
print('程序运行结束')
break
else:
print('输入无效,程序终止')
break

七、总结

以上是目前运行程序发现并解决问题的一些思路,这个程序对高手而言或许不够简洁,但是基于目前知识有限,希望大家能够提出建议,还有运行中要是有发现其他问题欢迎提出,共同进步。最后小秀一把一次就猜对成绩,嘿嘿!

初学python写个自娱自乐的小游戏的更多相关文章

  1. 用 Python 写个消消乐小游戏

    提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 很多人学习python,不 ...

  2. 用python写了一个猜年龄小游戏

    写一个猜年龄游戏: 需要实现用户登录的功能 初始用户登录信息为 {'hades': '13579','nick': '123','ruixing': 'a1','fanping': 'b2'} 登录时 ...

  3. python写的第一个简单小游戏-猜数字

    #Filename:game1.py guess=10 running=True while running: try: answer=int(raw_input('Guess what i thin ...

  4. 初学Python写二进制文件

    初学Python写二进制文件 把一个图片的16进制数据保存到一个txt文本,从这个txt文本读出并保存为二进制文件jpg图片文件.说明:图片读出的0xff粘贴ff到文本中,读出时是字符串的”ff”. ...

  5. Python基础入门-实现猜数字小游戏

    今天呢,我们来通过前面学过的一些知识点来完成一个猜数字大小的游戏程序设计.那么呢,一般人写代码直接上来就干,没有分析,这样的做法是没有产出的,除非你是大牛,今天呢,我会把我学习编程的思路分享给大家,我 ...

  6. 一听就懂:用Python做一个超简单的小游戏

    写它会用到 while 循环random 模块if 语句输入输出函数

  7. 用python实现自动玩21点小游戏

    1. 背景 前段时间发现一个论坛上(https://npupt.com/blackjack.php)有21点小游戏. 这个21点小游戏的规则是每个人开局都会获得随机点数,如果觉得点数小,可以继续摸牌. ...

  8. python 基础(实例1——登陆小游戏)

    一个简单的登陆小游戏,输入用户名和密码,如果和user_passwd.txt中内容匹配,则打印“welcome to login...”,如果三次输入错误则将该用户列入黑名单,无法再用该用户名登陆. ...

  9. 零基础python教程-用Python设计你的第一个小游戏

    学以致用,既然学习了python就要让它来实现我们想做的东西,这次咱就用python来做个简单小游戏,在实践中不断成长. 1.游戏代码: 输入数字,来猜测原作者心中所想的数字,猜中夸你,猜不中不夸你, ...

随机推荐

  1. .NET 5 支持 Azure Functions OpenAPI 扩展啦

    今年5月,在 Build大会上,Azure FunctionsOpenAPI的功能支持(预览版)正式宣布. 当时,它最高支持 v3 运行时--.NET Core 3.1 版本. 最近,它发布了 .NE ...

  2. C#新版本风格(NetCore)项目文件

    在VisualStudio中创建NetCore以上版本的项目,使用的都是新版本风格的项目文件. 和旧版本.NetFramework版本的项目文件区别: 双击项目可直接打开csproj文件进行编辑配置 ...

  3. 复习&反思

    阴间题目 半夜 糖果 Cicada 与排序 排列 Cover 玩具 夜莺与玫瑰 God Knows 简单的填数 反思 20210826 Lighthouse,Miner,Lyk Love painti ...

  4. 初学AOP小结

    Spring AOP理解 参考链接 AOP简介 AOP(面向切面编程),可以说时OOP的补充,使用OOP时,我们在日常编写代码的时候,一旦牵涉到大型一点的项目,项目不可或缺的事务处理,安全处理,验证处 ...

  5. 什么是内存屏障? Why Memory Barriers ?

           要了解如何使用memory barrier,最好的方法是明白它为什么存在.CPU硬件设计为了提高指令的执行速度,增设了两个缓冲区(store buffer, invalidate que ...

  6. 记录一下Vray5中文汉化版本中导出EXR或vrimg多通道文件的那些坑和解决方法

    最近在给一个培训机构代课,学生英语基础差,就安装了Vray5的中文版,噩梦从此开始. 做过合成的都知道,需要输出多通道到NUKE或者AE中进行合成,通常情况下把多个pass分成不同的文件对硬盘反复读写 ...

  7. Linux学习笔记--终端命令

    ~ 表示用户目录路径 ls   显示当前目录下的文件或目录 -l 列出文件纤细信息l(list) -a 列出当前目录下所有文件及目录, 包含隐藏的a(all) mkdir   创建目录 -p 创建目录 ...

  8. [第十二篇]——Docker Dockerfile之Spring Cloud直播商城 b2b2c电子商务技术总结

    Docker Dockerfile 什么是 Dockerfile? Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明. 使用 Dockerfile 定制 ...

  9. 方法重载(Override)

    什么是方法的重写(override 或 overwrite)? 子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作. 应用: 重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参 ...

  10. 1.docker概述及其历史

    一. 为什么会出现docker? 不用说, 肯定是时代进步的产物. 那么, 他为什么能火? 一定是解决了痛点问题. docker也不是一下子就火起来了, 他的火也是有一个过程的, 我们先来看看为什么会 ...