一、摘要

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

二、游戏规则

下面我们通过一个“猜数字”的小游戏来看看如何使用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. bat 使用ftp进行文件上传

    实例 @echo off rem 打开远程ftp echo open 172.16.137.23 > ftpconfig.txt rem 使用匿名用户登录 echo user anonymuou ...

  2. 基于Appium,封装自己的常用方法

    Appium算是老牌移动端App自动化测试工具了,在使用它的过程中,使用者经常会根据个人习惯,把较常用的方法封装在一起,方便调用.以下是我的封装,希望对你有启发. from typing import ...

  3. PPPoE技术白皮书(H3C)

    PPPoE技术白皮书 关键词:PPP,Ethernet,PPPoE 摘要:PPPoE是一种通过一个远端接入设备为以太网上的主机提供接入服务,并可以对接入的每个主机实现控制和计费的技术.本文介绍了PPP ...

  4. 技术栈:springboot2.x,vue,activiti5.22,mysql,带工作流系统

    前言 activiti工作流,企业erp.oa.hr.crm等审批系统轻松落地,请假审批demo从流程绘制到审批结束实例. 一.项目形式 springboot+vue+activiti集成了activ ...

  5. Django学习day15BBS项目开发2.0

    每日测验 """ 今日日考 1.img标签src属性可以指代的值有哪些,各有什么特点 2.pillow模块是干什么用的,主要的方法有哪些 3.简述登陆功能图片验证码相关逻 ...

  6. 在PHP中操作文件的扩展属性

    在操作系统的文件中,还存在着一种我们可以自己定义的文件属性.这些属性不是保存在文件内容中,也不是直接可以通过 ls -al 所能看到的内容.它们可以将一个键值对信息永久得关联到文件上,一般现在的 Li ...

  7. PHP获取目录中的全部内容RecursiveDirectoryIterator

    这次我们来介绍一个SPL库中的目录迭代器,它的作用其实非常简单,从名字就可以看出来,就是获取指定目录下的所有内容.之前我们要遍历目录获取目录及目录下的所有文件一般是需要进行递归遍历的,自己写这个代码说 ...

  8. Hadoop-3.1.3安装

    0.创建用户并付权限 sudo useradd iwbdsudo passwd iwbd 配置iwbd用户具有root权限 修改/etc/sudoers文件,找到下面一行(91行),在root下面添加 ...

  9. Shell系列(12)- 预定义变量(5)

    预定义变量 作用 $? 常用:最后一次执行的命令的返回状态. 如果这个变量的值为0,证明上一个命令正确执行:如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了 $$ ...

  10. CentOS7安装Docker遇到的问题笔记

    笔记/朱季谦 以下是笔者本人学习搭建docker过程当中记录的一些实践笔记,过程当中也遇到了一些坑,但都解决了,就此记录,留作以后再次搭建时可以直接参考. 一.首先,先检查CentOS版本,保证在Ce ...