Python实现猜拳小游戏的多种方式

2023-10-08 18:40

本文主要是介绍Python实现猜拳小游戏的多种方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

猜拳小游戏是一个经典的小游戏项目,也是初学者学习编程的必要练手题目之一。在 Python 中,我们可以使用多种方式来实现一个简单的猜拳小游戏。

本文将依次介绍六种Python实现猜拳小游戏的方法,包括:使用 if-else 条件语句、使用 random 模块、使用字典映射胜负关系、for循环、while循环、函数。知识点依次堆加,这些方式各有优缺点,但无论哪种方式,都能够帮助初学者熟悉 Python 的编码语法和逻辑思维,更好地理解 Python 的基本数据类型、控制语句等内容;对于专业人士,可以根据具体需求进行选择。

实现方式一:使用 if-else 条件语句

不能使用while循环和for循环还有随机数模块,因此电脑的出拳方式的生成只能通过计算得到,而该算法只能模拟随机数的一部分特性,因此在实际应用中可能存在一定的问题。

注意,这个程序中没有使用while循环或for循环等任何循环语句,因此只会执行一次猜拳游戏。

# 定义常量
ROCK = 1
PAPER = 2
SCISSORS = 3# 输出欢迎信息
print("欢迎来到猜拳游戏!")
print("游戏规则:")
print("1. 石头胜剪刀")
print("2. 剪刀胜布")
print("3. 布胜石头")# 定义得分变量
player_score = 0
computer_score = 0
tie_count = 0# 让玩家输入出拳方式
player_choice = int(input("请输入您的出拳方式(1:石头,2:剪刀,3:布):"))# 判断玩家的选择
if player_choice == ROCK:print("你出了石头")
elif player_choice == PAPER:print("你出了剪刀")
else:print("你出了布")# 生成电脑的出拳方式
computer_choice = ((player_score + computer_score + tie_count) % 3) + 1# 输出电脑的选择
if computer_choice == ROCK:print("电脑出了石头")
elif computer_choice == PAPER:print("电脑出了剪刀")
else:print("电脑出了布")# 判断输赢并输出结果
if player_choice == ROCK:if computer_choice == ROCK:print("平局")tie_count += 1elif computer_choice == PAPER:print("电脑获胜")computer_score += 1else:print("你获胜")player_score += 1
elif player_choice == PAPER:if computer_choice == ROCK:print("你获胜")player_score += 1elif computer_choice == PAPER:print("平局")tie_count += 1else:print("电脑获胜")computer_score += 1
else:if computer_choice == ROCK:print("电脑获胜")computer_score += 1elif computer_choice == PAPER:print("你获胜")player_score += 1else:print("平局")tie_count += 1# 输出得分情况
print(f"您的得分:{player_score},电脑的得分:{computer_score},平局次数:{tie_count}")

实现方式二:使用 random 模块

在使用if语句的基础上通过引入 Python 的 random 模块,实现电脑随机产生手势的功能。

注意,这个程序中没有使用while循环或for循环等任何循环语句,因此只会执行一次猜拳游戏。

import random  # 引入 random 模块,用于产生随机数print("欢迎来到猜拳游戏!")
print("请出拳:1-石头,2-剪刀,3-布")# 获取用户输入,将输入转换成整型数字
user_input = int(input())# 电脑随机出拳,使用 random.choice 随机从列表中选择一个元素
computer_choice = random.choice(["石头", "剪刀", "布"])# 判断胜负
if (user_input == 1 and computer_choice == "剪刀") or \(user_input == 2 and computer_choice == "布") or \(user_input == 3 and computer_choice == "石头"):print("你赢了!电脑出了", computer_choice)
elif (user_input == 1 and computer_choice == "布") or \(user_input == 2 and computer_choice == "石头") or \(user_input == 3 and computer_choice == "剪刀"):print("你输了!电脑出了", computer_choice)
else:print("平局!电脑出了", computer_choice)

实现方式三:使用字典映射胜负关系

使用if语句与随机数模块和一个字典来映射石头剪刀布的胜负规则,并根据用户和计算机输入的选项对应的键值找到其胜出的选项

# 使用字典映射实现猜拳小游戏import random  # 引入 random 模块,用于产生随机数# 定义字典,映射石头、剪刀、布分别击败什么
rule_dict = {'石头': '剪刀', '剪刀': '布', '布': '石头'}# 用户出拳
print('猜拳开始,请出拳(石头、剪刀、布):')
user_choice = input()# 电脑出拳,从列表['石头', '剪刀', '布']中随机选择一个元素
computer_choice = random.choice(['石头', '剪刀', '布'])
print('你出了 %s ,电脑出了 %s' % (user_choice, computer_choice))# 判断胜负,根据字典中定义的胜负关系进行判断
if rule_dict[user_choice] == computer_choice:print('你赢了!')
elif rule_dict[computer_choice] == user_choice:print('你输了!')
else:print('平局。')

实现方式四:for循环

这种实现方式使用if语句、随机数模块和一个字典来映射石头剪刀布的胜负规则,并使用for循环来实现猜拳小游戏

# 导入随机数模块
import random# 定义字典,用于存储石头、剪刀、布之间的胜负关系
choices = {"石头": "剪刀", "剪刀": "布", "布": "石头"}# 设置需要赢得的局数
rounds_to_win = 2# 初始化玩家、计算机的分数
player_score = 0
computer_score = 0# 进入一个循环,在每一轮游戏中:
for round in range(1, 4):print(f"第{round}局:")  # 输出当前轮次computer_choice = random.choice(list(choices.keys()))  # 计算机随机选择player_choice = input("请出拳(石头/剪刀/布):")  # 玩家输入选择print(f"你出了{player_choice},电脑出了{computer_choice}。")  # 输出选择if player_choice == computer_choice:  # 判断平局情况print("平局!")elif choices[player_choice] == computer_choice:  # 判断玩家获胜情况print("你赢了!")player_score += 1  # 更新玩家得分else:  # 否则为计算机获胜情况print("电脑赢了!")computer_score += 1  # 更新计算机得分print(f"当前比分:玩家 {player_score} - 电脑 {computer_score}")if player_score == rounds_to_win:  # 判断玩家达到赢得的局数print("你赢得了比赛!")break  # 结束游戏循环elif computer_score == rounds_to_win:  # 判断计算机达到赢得的局数print("电脑赢得了比赛!")break  # 结束游戏循环

实现方式五:while循环

在原有基础上进行修改,将for循环替换为while循环;

  1. 增加了用户交互环节,让用户可以选择自己出拳或者输入r随机出拳的功能;
  2. 记录了游戏结果统计变量(比如用户胜利场数、电脑胜利场数和回合数),并在游戏结束时打印比分结果;
  3. 在满足三局两胜的条件时结束游戏,并询问用户是否再次开启游戏;
import random# 定义一个字典,用于映射石头剪刀布的胜负规则
rps_dict = {'石头': '剪刀', '剪刀': '布', '布': '石头'}# 初始化用户选择和电脑选择
user_choice = None
computer_choice = None# 初始化游戏结果统计变量
user_win_count = 0
computer_win_count = 0
round_count = 0# 使用while循环实现猜拳小游戏
while True:# 打印提示信息print("欢迎来到猜拳游戏!")print("请输入石头、剪刀或布(输入r表示随机选择):")# 获取用户输入user_input = input().strip().lower()# 如果用户输入为r,则随机选择石头、剪刀或布if user_input == 'r':computer_choice = random.choice(list(rps_dict.values()))# 如果用户输入为有效的选项,则将其转换为对应的值并赋值给user_choice和computer_choiceelif user_input in list(rps_dict.keys()):user_choice = user_inputcomputer_choice = rps_dict[user_input]# 如果用户输入无效,则提示错误信息并继续循环else:print("输入无效,请重新输入!")continue# 判断胜负并输出结果if user_choice == computer_choice:print("平局!")elif (user_choice == '石头' and computer_choice == '剪刀') or \(user_choice == '剪刀' and computer_choice == '布') or \(user_choice == '布' and computer_choice == '石头'):print("恭喜你,你赢了!")user_win_count += 1else:print("很遗憾,你输了。")computer_win_count += 1# 打印本局游戏的结果print(f"你出了{user_choice},电脑出了{computer_choice}")print(f"当前比分:你 {user_win_count} - {computer_win_count} 电脑\n")# 增加回合数并判断是否达到三局两胜的条件round_count += 1if user_win_count == 2:print("你已经获得三局两胜了,你赢了!")breakelif computer_win_count == 2:print("很遗憾,电脑获得了三局两胜,你输了!")break# 根据用户的选择决定是否继续游戏replay = input("是否再玩一局?(y/n)").strip().lower()if replay != 'y':break# 询问用户是否再次开启游戏
play_again = input("是否再次开启游戏?(y/n)").strip().lower()
if play_again == 'y':exec(open(__file__).read())
else:print("游戏结束!")

实现方式六:函数

对while循环的代码进行重构使用函数进行优化

import random
from time import sleep# 定义一个字典,用于映射石头剪刀布的胜负规则
rps_dict = {'石头': {'name': '石头', 'defeat': '布'},'剪刀': {'name': '剪刀', 'defeat': '石头'},'布': {'name': '布', 'defeat': '剪刀'}}# 清屏函数,用于在每次输出前清空屏幕
def clear_screen():print('\033c', end='')# 美化输出函数,用于打印美观的输出界面
def print_beautiful(message):print('='*50)print(f"{message:^50}")print('='*50)# 获取用户输入函数,用于获取用户选择
def get_user_choice():while True:user_input = input("请选择 石头、剪刀、布:")if user_input not in rps_dict:print_beautiful("选择无效,请重新选择")else:breakreturn rps_dict[user_input]# 电脑随机选择函数
def get_computer_choice():return random.choice(list(rps_dict.values()))# 判断胜负函数
def judge(user_choice, computer_choice):if user_choice == computer_choice:result = "平局!"winner = Noneelif user_choice['defeat'] == computer_choice['name']:result = "很遗憾,你输了。"winner = 'computer'else:result = "恭喜你,你赢了!"winner = 'user'return result, winner# 打印结果函数
def print_result(result, user_choice, computer_choice):print_beautiful(result)sleep(1)print(f"你出了【{user_choice['name']}】,电脑出了【{computer_choice['name']}】")# 根据胜负结果更新胜利次数函数
def update_win_count(winner, win_count):if winner == 'user':win_count['user'] += 1elif winner == 'computer':win_count['computer'] += 1# 打印当前比分函数
def print_score(win_count):print(f"当前比分:你 {win_count['user']} - {win_count['computer']} 电脑\n")# 判断是否达成胜利条件函数
def check_victory(win_count):if win_count['user'] == 2:print_beautiful("恭喜你,你已经获得三局两胜了,你赢了!")return Trueelif win_count['computer'] == 2:print_beautiful("很遗憾,电脑获得了三局两胜,你输了!")return Trueelse:return False# 再玩一局函数
def ask_replay():while True:replay = input("是否再玩一局?(y/n)").strip().lower()if replay not in ['y', 'n']:print_beautiful("输入无效,请重新输入")else:breakreturn replay == 'y'# 游戏结束函数
def game_over():print_beautiful("游戏结束!")sleep(2)# 主函数,实现游戏逻辑
def main():clear_screen()print_beautiful("欢迎来到猜拳游戏!")win_count = {'user': 0, 'computer': 0}while True:user_choice = get_user_choice()computer_choice = get_computer_choice()result, winner = judge(user_choice, computer_choice)print_result(result, user_choice, computer_choice)update_win_count(winner, win_count)print_score(win_count)if check_victory(win_count):if not ask_replay():breakelse:win_count = {'user': 0, 'computer': 0}clear_screen()game_over()if __name__ == '__main__':main()

好了,今天的分享就到这里!如果你对Python感兴趣,想要学习pyhton,这里给大家分享一份Python全套学习资料,里面的内容都是适合零基础小白的笔记和资料,超多实战案例,不懂编程也能听懂、看懂。

需要的话可以微信扫描下方二维码免费获得。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述
二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述
三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~在这里插入图片描述

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
七、资料领取

上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取

这篇关于Python实现猜拳小游戏的多种方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/167274

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss