一听就懂:用Python做一个超简单的小游戏
写它会用到
while 循环
random 模块
if 语句
输入输出函数
源码先抛出来
import random #导入random模块,用来产生随机数
times = 10 #设置我们的答题次数
secret = random.randint(1,100) #随机给random一个1~9的数字,再给secret赋值
print('---------------Python要和你玩猜数字游戏---------------')
print('猜一个1-100之间的数')
guess = 0 #设定guess的值
while (guess != secret) and (times > 0): #结束条件,要么次数用完,要么答对。
guess = int(input("猜猜我想的是几:")) #用户输入,并转换为整数
times = times - 1 #用户每输入一次,猜数次数就-1
if guess == secret: #如果用户输入对了
print("恭喜你猜对了!")
print("哼,猜中了也没有奖励!")
break #跳出循环
else:
if guess > secret:
print("大了大了~~~")# 之所以不在这里设置重输,是因为在if times > 0: 中已经弄过了,这样避免输两次,也避免次数已用完还让重输
else:
print("小了小了-_-")
if times > 0: #判断次数是否用完
print("再试一次吧:", end=" ")
else:
print("机会用光咯T_T")
print("我想的是"+str(secret)+"!") #揭晓答案
print("游戏结束,不玩啦^_^")
知识讲解
random
#0## 介绍
Python中的随机数操作较简单,不像其他高级语言那样必须用特定的公式才能产生
语法
import random #导入模块
random.方法() #调用方法
方法参数表
方法 | 作用 |
---|---|
randint(一个整数,另一整数) | 产生从一个整数-另一整数的随机整数 |
uniform(a,b) | 产生 a 到 b之间的随机浮点数 |
… | … |
目前我们用到的是randint()方法。
举例
>>> import random
>>> random.randint(0,10)
5
>>> random.randint(0,10)
2
>>>
while
语法
while 循环条件:
语句
举例
num = 0
while num<3:#如果num小于3,就进入循环
num+=1 #等同num=num+1
print(num)
图:
拆分代码讲解
产生随机数
import random
random.randint(0,100)
运行结果:
>>> random.randint(0,100)
50
>>> random.randint(0,100)
28
>>> random.randint(0,100)
35
>>> random.randint(0,100)
15
>>> random.randint(0,100)
10
>>> random.randint(0,100)
27
>>> random.randint(0,100)
89
>>> random.randint(0,100)
43
>>> random.randint(0,100)
90
>>> random.randint(0,100)
16
>>> random.randint(0,100)
80
>>>
现在我们可以产生随机数了,但是只有调用一次方法才能产生一次随机数,怎么办呢?对了,可以用循环来反复做相同的事。
循环产生随机数
import random
while True:
random.randint(0,100)
运行结果:
68
25
51
44
75
21
70
2
4
25
95
34
19
59
63
98
93
15
0
60
69
33
2
84
38
54
30
64
69
94
94
8
24
95
80
69
83
20
48
92
24
48
51
77
25
23
68
70
84
34
56
86
30
39
12
90
0
36
31
23
34
51
60
26
81
63
88
74
40
55
69
47
44
8
38
6
63
3
72
76
8
100
88
20
99
49
47
35
80
7
49
6
78
42
20
44
49
49
71
53
55
67
51
55
39
87
98
19
61
70
76
58
94
47
73
10
22
29
89
95
33
98
44
15
29
4
78
16
13
71
78
43
18
43
29
64
87
8
66
91
55
12
81
8
48
20
23
5
6
Traceback (most recent call last):
File "<pyshell#3>", line 2, in <module>
random.randint(0,100)
KeyboardInterrupt
>>>
可以看到,它一直输出随机数,这并不是我们想要的,我们想要的是用户输入一个数,和这个随机数比对
增加循环条件和简单的判断
对上述采取的方法是:把产生的随机数存入变量,进行判断、比对
import random
secret = random.randint(0,100) #产生随机整数
guess = input('猜猜我想的是几:')#获取用户输入
while guess!=secret:#当用户输入不等于产生的数时,进入循环
if guess>secret:#当用户输入的数大于随机数时
print("大了大了@_@")#打印提示文字
else:#当用户输入的数小于随机数时
print("小了小了>_<")#打印提示文字
print("恭喜你答对了!")
print("哼,对了也没有奖励!")
print('游戏结束,不玩了~')
看似没有问题,我们来运行一下
运行后发现报错了:
猜猜我想的是几:12
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/aa.py", line 5, in <module>
if guess>secret:#当用户输入的数大于随机数时
TypeError: '>' not supported between instances of 'str' and 'int'
哦,原来是没有转换类型,input返回的是字符串,字符串不能和整数比较
改后:
import random
secret = random.randint(0,100) #产生随机整数
guess = int(input('猜猜我想的是几:'))#获取用户输入,并转化为整数
while guess!=secret:#当用户输入不等于产生的数时,进入循环
if guess>secret:#当用户输入的数大于随机数时
print("大了大了@_@")#打印提示文字
else:#当用户输入的数小于随机数时
print("小了小了>_<")#打印提示文字
print("恭喜你答对了!")
print("哼,对了也没有奖励!")
print('游戏结束,不玩了~')
运行:
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
小了小了>_<
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/aa.py", line 8, in <module>
print("小了小了>_<")#打印提示文字
KeyboardInterrupt
>>>
还是有问题!
解决报错&增加输错重输功能、限制用户输入次数功能
同学们想想,当打印提示语后,用户没有重输,会一直满足那个条件,就会循环打印。
那么我们可以增加重输功能,当输的不对时,就重输,就不会循环打印了;
添加限制用户输入功能,这样就避免用户一直猜
1.当然,因为又加了一个功能,答对了的提示就不能放在循环外面了,
2.之所以不在打印大了小了设置重输,是因为在if times > 0: 中已经弄过了,这样避免输两次,也避免次数已用完还让重输
import random #导入random模块,用来产生随机数
times = 10 #设置我们的答题次数
secret = random.randint(1,100) #随机给random一个1~9的数字,再给secret赋值
print('---------------Python要和你玩猜数字游戏---------------')
print('猜一个1-100之间的数')
guess = 0 #设定guess的值
while (guess != secret) and (times > 0): #结束条件,要么次数用完,要么答对。
guess = int(input("猜猜我想的是几:")) #用户输入,并转换为整数
times = times - 1 #用户每输入一次,猜数次数就-1
if guess == secret: #如果用户输入对了
print("恭喜你猜对了!")
print("哼,猜中了也没有奖励!")
break #跳出循环
else:
if guess > secret:
print("大了大了~~~")# 之所以不在这里设置重输,是因为在if times > 0: 中已经弄过了,这样避免输两次,也避免次数已用完还让重输
else:
print("小了小了-_-")
if times > 0: #判断次数是否用完
print("再试一次吧:", end=" ")
else:
print("机会用光咯T_T")
print("我想的是"+str(secret)+"!") #揭晓答案
print("游戏结束,不玩啦^_^")
效果
缺陷
没有设置输入限制,如果用户输入的是字母,那int转换就会报错;这个我就不写了,有兴趣的同学可以在评论区写一下。有什么不懂的地方,也欢迎在评论区提问
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
一听就懂:用Python做一个超简单的小游戏的更多相关文章
- gulp安装+一个超简单入门小demo
gulp安装參考.gulp安装參考2. 一.NPM npm是node.js的包管理工具.主要功能是管理.更新.搜索.公布node的包. Gulp是通过npm安装的. 所以首先,须要安装node.js. ...
- Python基础入门-实现猜数字小游戏
今天呢,我们来通过前面学过的一些知识点来完成一个猜数字大小的游戏程序设计.那么呢,一般人写代码直接上来就干,没有分析,这样的做法是没有产出的,除非你是大牛,今天呢,我会把我学习编程的思路分享给大家,我 ...
- 用Python做一个知乎沙雕问题总结
用Python做一个知乎沙雕问题总结 松鼠爱吃饼干2020-04-01 13:40 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以 ...
- 使用python做一个IRC在线下载器
使用python做一个IRC在线下载器 1.开发流程 2.软件流程 3.开始 3.0 准备工作 3.1寻找API接口 3.2 文件模块 3.2.1 选择文件弹窗 3.2.2 提取文件名 3.2.2.1 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- 尝试做一个.NET简单、高效、避免OOM的Excel工具
Github : https://github.com/shps951023/MiniExcel 简介 我尝试做一个.NET简单.高效.避免OOM的Excel工具 目前主流框架大多将资料全载入到记忆体 ...
- 初学python写个自娱自乐的小游戏
一.摘要 当编写完后的代码执行第一次后达到了目标的预期效果,内心有些许满足,但是当突发情况产生后,程序便不能正常运行,于是准备从简单的版本开始出发,综合考虑使用者的需求,和使用过程中会遇到的问题,一步 ...
- 在树莓派上用 python 做一个炫酷的天气预报
教大家如何在树莓派上自己动手做一个天气预报.此次教程需要大家有一定的python 基础,没有也没关系,文末我会放出我已写好的代码供大家下载. 首先在开始之前 需要申请高德地图API,去高德地图官网注册 ...
- 用python做一个搜索引擎(Pylucene)
什么是搜索引擎? 搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分”.如图1是搜索引擎的一般结构,信息搜集模块从网络采集信息到网络信息库之中(一般 ...
随机推荐
- 【VUE】2.渲染组件&重定向路由
1.删除多余组件,使环境赶紧 1. 整理App.vue, 删除多余内容,在template 模板区域增加一个路由占位符 router-view:渲染路径匹配到的视图组件 <template> ...
- 从数据仓库双集群系统模式探讨,看GaussDB(DWS)的容灾设计
摘要:本文主要是探讨OLAP关系型数据库框架的数据仓库平台如何设计双集群系统,即增强系统高可用的保障水准,然后讨论一下GaussDB(DWS)的容灾应该如何设计. 当前社会.企业运行当中,大数据分析. ...
- The Balance POJ - 2142
首先,可以知道题目要求解一个\(ax+by=c\)的方程,且\(x+y\)最小. 感性证明: 当\(a>b\)时,\(y\)取最小正整数解,\(b\)减的多,\(a\)增的少,此时\(x+y\) ...
- LIS问题$n log_2 n$做法(二分优化)
#include<bits/stdc++.h> using namespace std; const int inf=1e9+5; const int maxn=1e6+5; int n, ...
- Java基础教程——List(列表)
集合概述 Java中的集合,指一系列存储数据的接口和类,可以解决复杂的数据存储问题. 导包:import java.util.*; 简化的集合框架图如下: List·列表 ArrayList List ...
- Java基础教程——正则表达式
正则表达式·Regular Expression 正则表达式就是一个用于匹配字符串的模板,正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 主要用到的对象: java.util.rege ...
- spring与分布式事务
转载:https://www.cnblogs.com/qianjun2017/p/8349829.html 转载:https://blog.csdn.net/jaryle/article/detail ...
- spring aop 、Redis实现拦截重复操作
一.问题:项目中有一些重复操作的情况,比如: 1.从场景有用户快速点击提交按钮,或者postMan测试时快速点击 2.从业务上来说,用户注册.用户下单等 3.黑客攻击 二.解决办法 1.使用sprin ...
- 解决右键notepad++打开时提示, ShellExecute failed (2): Is this command correct?
错误如下图: 解决方法: 右键notepad++.exe; 去掉管理员方式
- springsecurity实现前后端分离之jwt-资料收集
https://www.jianshu.com/p/5b9f1f4de88d https://www.jianshu.com/p/725d32ab92f8 https://blog.csdn.net/ ...