当前位置: 首页 > news >正文

python做简单的游戏名字_零基础Python实战(二),20行写个剪刀石头布游戏

大家好,欢迎来到Python实战专题。

没想到大家对于实战类的热情很高,已经有好几个小伙伴催更了。所以马不停蹄地写了这篇,我们继续来带大家用Python做一些简单的项目,带领大家实际练习,最终熟练掌握这门语言。

课题

今天的课题非常简单,我们一样来写一个小游戏,这个小游戏大家都会玩,就是著名的剪刀石头布的游戏。

这个游戏的英文叫做rock paper and scissors,规则也不用我说了,大家想必都非常熟悉。最终运行的结果是这样的:

5286c0219a9b7fdda63b22a6cfbe2453.png

也就是说我们输入r表示石头,p表示布,s表示剪刀。电脑会随机出一个,然后根据我们和电脑的选项判定输赢,输出最终的结果。

知识点

剪刀石头布和上次的猜数游戏差别不大,都是很简单的游戏,代码层面的难点并不多。关于输入输出以及if-else这些基础的语法上一期已经讲过了, 这里我们就不多赘述了。主要挑一些大家不太熟悉可能不太了解的内容聊聊。

随机数

首先是随机数,Python原生就有随机数的功能,不过并不是一个系统函数,而是需要引入random包。

Python当中的引包非常简单,使用import加上包的名字或者路径即可。比如我们要引入的随机数包叫做random,我们直接import进来即可。

import random

random这个包当中的方法很多,可以说是应有尽有,基本上我们日常关于随机的需求都能实现。既可以随机一个整数,也可以随机一个小数,还可以随机采样,也可以随机乱序。

在今天的问题当中,我们需要的是随机采样,也就是从石头、剪刀和布当中随机抽取一个。我们使用random.choice这个方法来实现,一行即可。

computer = random.choice(['r', 'p', 's'])

说到随机数就必须要提到随机数种子,我们在之前讲解随机数原理的文章当中曾经详细介绍过。现在的随机数其实都是伪随机数,是根据某种算法算出来的,其实是围绕随机数种子遵守某一个分布的,并不是真正意义上的随机。如果大家不停地运行,会发现输出的结果是有规律的。为了解决这个问题,我们常规的方法是用当前的时间作为随机数种子,这样就可以尽量消除输出结果的规律性。

import time

random.seed(time.time())

由于我们需要用到时间相关的函数,所以需要在一开始import time这个包。

函数

在今天的内容当中,我们将会用到函数。

Python中的函数非常非常简单,它几乎没有限制,我们可以用函数来实现一切我们想要做的事情。限制少的好处是学起来容易,不需要记住各种各样的条件,但是缺点是非常灵活,易学难精,很多高级用法学不会或者说接触不到。这里呢我们只需要用到最简单的函数的写法,大概是下面这个样子。

def func(input1, input2):

pass

def表示我们创建的是一个函数,后面跟上函数名,然后在函数名后面是括号括起来的参数。这里我们也不用管什么必选参数和默认参数了,统统当成是必选参数,然后我们在函数体下面实现我们想要的功能。

Python是非常灵活的,我们可以在函数当中返回任何东西,也可以什么都不返回,甚至可以不同的条件返回的结果个数和类别都不同。

三元表达式

最后介绍一下Python当中的三元表达式,三元表达式是一个可选项,也就是说你可以一辈子不用三元表达式,这并不会带来任何影响。因为三元表达式的本质就是if-else的语句,只是三元表达式相比较来说更加简易,写代码的时候使用会比较顺手。

Python中的三元表达式相比于C++我个人感觉更好理解一些,虽然写起来稍微复杂了一点点,但是对新手来说还是比较友好的。比如我们要根据某一个条件判断一个变量的值是0还是1,我们可以写成这样:

param = 1 if xxx else 0

三元表达式也可以嵌套,比如两个if else嵌套在一起,但是这样会导致代码的可读性很差,不建议这么干。

尾声

基本上本次课题用到的知识点就是上面这些,大家不妨试试看自己亲自动手写一写练练手,如果实在写不出来可以在公众号后台回复Python2,我把我的代码发给你们。

只是实现剪刀石头布还是比较简单的,大家完成了之后其实还可以做一些拓展。比如可以在开局的时候设置是几局几胜,再比如可以给电脑设计一个简单的ai,看看有没有什么办法可以提升电脑的胜率等等。

好了,今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、在看、转发)

相关文章:

  • python拆分参数列表_Python:使用itertools将列表拆分为组的参数
  • python语言哪种最好_学习Python语言选择哪种方式好?
  • rc时间常数定义_时间常数RC的计算方法
  • mysql 进行数据维护_MySQL从库维护经验分享
  • jsp mysql 导出 excel乱码_jsp存取mysql中文数据结果为乱码的解决方法(转自自己以前的blog)...
  • python面向对象基础知识_python面向对象的基础知识
  • mysql递归查询及节点层级_Mysql中的递归层次查询(父节点下的所有节点)
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • datax把text转mysql_使用DataX实现mysql数据迁移
  • haccp体系的参照标准是_食品安全标准与ISO、GMP、HACCP等体系之间的相互关系
  • mac mysql 多实例_Mac上mysql多端口实例配置并设置开机自动启动
  • mysql 主要有哪些函数_mysql中有哪些函数
  • mysql索引失效解决6_简单介绍MySQL索引失效的几种情况
  • java 获取方法的参数_Java 8中如何获取参数名称的方法示例
  • java gui程序运行_13.JAVA之GUI编程将程序打包jar
  • Google 是如何开发 Web 框架的
  • Angular Elements 及其运作原理
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python学习之路16-使用API
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Zepto.js源码学习之二
  • 编写高质量JavaScript代码之并发
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 看域名解析域名安全对SEO的影响
  • 离散点最小(凸)包围边界查找
  • 入手阿里云新服务器的部署NODE
  • 十年未变!安全,谁之责?(下)
  • 数组大概知多少
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 运行时添加log4j2的appender
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #if和#ifdef区别
  • #pragam once 和 #ifndef 预编译头
  • #pragma once
  • (4)Elastix图像配准:3D图像
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (solr系列:一)使用tomcat部署solr服务
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)VirtualBox安装增强功能
  • (一)基于IDEA的JAVA基础10
  • (转)Mysql的优化设置
  • (转载)利用webkit抓取动态网页和链接
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET运行机制
  • /proc/stat文件详解(翻译)
  • @DataRedisTest测试redis从未如此丝滑
  • @Transactional类内部访问失效原因详解
  • [ IO.File ] FileSystemWatcher
  • [20161101]rman备份与数据文件变化7.txt