翼度科技»论坛 编程开发 python 查看内容

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

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
简介

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

不能使用while循环和for循环还有随机数模块,因此电脑的出拳方式的生成只能通过计算得到,而该算法只能模拟随机数的一部分特性,因此在实际应用中可能存在一定的问题。
注意,这个程序中没有使用while循环或for循环等任何循环语句,因此只会执行一次猜拳游戏。
  1. # 定义常量
  2. ROCK = 1
  3. PAPER = 2
  4. SCISSORS = 3
  5. # 输出欢迎信息
  6. print("欢迎来到猜拳游戏!")
  7. print("游戏规则:")
  8. print("1. 石头胜剪刀")
  9. print("2. 剪刀胜布")
  10. print("3. 布胜石头")
  11. # 定义得分变量
  12. player_score = 0
  13. computer_score = 0
  14. tie_count = 0
  15. # 让玩家输入出拳方式
  16. player_choice = int(input("请输入您的出拳方式(1:石头,2:剪刀,3:布):"))
  17. # 判断玩家的选择
  18. if player_choice == ROCK:
  19.     print("你出了石头")
  20. elif player_choice == PAPER:
  21.     print("你出了剪刀")
  22. else:
  23.     print("你出了布")
  24. # 生成电脑的出拳方式
  25. computer_choice = ((player_score + computer_score + tie_count) % 3) + 1
  26. # 输出电脑的选择
  27. if computer_choice == ROCK:
  28.     print("电脑出了石头")
  29. elif computer_choice == PAPER:
  30.     print("电脑出了剪刀")
  31. else:
  32.     print("电脑出了布")
  33. # 判断输赢并输出结果
  34. if player_choice == ROCK:
  35.     if computer_choice == ROCK:
  36.         print("平局")
  37.         tie_count += 1
  38.     elif computer_choice == PAPER:
  39.         print("电脑获胜")
  40.         computer_score += 1
  41.     else:
  42.         print("你获胜")
  43.         player_score += 1
  44. elif player_choice == PAPER:
  45.     if computer_choice == ROCK:
  46.         print("你获胜")
  47.         player_score += 1
  48.     elif computer_choice == PAPER:
  49.         print("平局")
  50.         tie_count += 1
  51.     else:
  52.         print("电脑获胜")
  53.         computer_score += 1
  54. else:
  55.     if computer_choice == ROCK:
  56.         print("电脑获胜")
  57.         computer_score += 1
  58.     elif computer_choice == PAPER:
  59.         print("你获胜")
  60.         player_score += 1
  61.     else:
  62.         print("平局")
  63.         tie_count += 1
  64. # 输出得分情况
  65. print(f"您的得分:{player_score},电脑的得分:{computer_score},平局次数:{tie_count}")
复制代码
实现方式二:使用 random 模块

在使用if语句的基础上通过引入 Python 的 random 模块,实现电脑随机产生手势的功能。
注意,这个程序中没有使用while循环或for循环等任何循环语句,因此只会执行一次猜拳游戏。
  1. # 使用 random 模块实现猜拳小游戏
  2. import random
  3. # 按照石头剪刀布的胜负规则判断输赢
  4. def who_win(user_input, computer_input):
  5.     win_list = [["石头","剪刀"], ["剪刀","布"], ["布","石头"]]
  6.     if user_input == computer_input:
  7.         return 0
  8.     elif [user_input,computer_input] in win_list:
  9.         return 1
  10.     else:
  11.         return -1
  12. while True:
  13.     # 玩家输入手势
  14.     user_choice = input("请选择(石头/剪刀/布):")
  15.     # 随机生成电脑的手势
  16.     computer_choice = random.choice(["石头", "剪刀", "布"])
  17.     print("电脑选择:", computer_choice)
  18.     # 判断胜负
  19.     result = who_win(user_choice, computer_choice)
  20.     if result == 0:
  21.         print("平局,再来一局!")
  22.     elif result == 1:
  23.         print("你赢了!")
  24.     else:
  25.         print("你输了!")
  26.     # 是否再来一局
  27.     play_again = input("是否再来一局?(y/n)")
  28.     if play_again.lower() != "y":
  29.         break
复制代码
实现方式三:使用字典映射胜负关系

使用if语句与随机数模块和一个字典来映射石头剪刀布的胜负规则,并根据用户和计算机输入的选项对应的键值找到其胜出的选项
  1. # 使用字典映射实现猜拳小游戏
  2. import random
  3. # 定义一个字典,表示石头剪刀布的胜负关系
  4. dict = {"石头": "剪刀", "剪刀": "布", "布": "石头"}
  5. while True:
  6.     # 玩家输入手势
  7.     user_choice = input("请选择(石头/剪刀/布):")
  8.     # 随机生成电脑的手势
  9.     computer_choice = random.choice(["石头", "剪刀", "布"])
  10.     print("电脑选择:", computer_choice)
  11.     # 判断胜负
  12.     if dict[user_choice] == computer_choice:
  13.         print("你赢了!")
  14.     elif user_choice == computer_choice:
  15.         print("平局!")
  16.     else:
  17.         print("你输了!")
  18.     # 是否再来一局
  19.     play_again = input("是否再来一局?(y/n)")
  20.     if play_again.lower() != "y":
  21.         break
复制代码
实现方式四:for循环

这种实现方式使用if语句、随机数模块和一个字典来映射石头剪刀布的胜负规则,并使用for循环来实现猜拳小游戏
  1. import random  
  2.   
  3. # 定义石头剪刀布的胜负规则  
  4. rules = {  
  5.     "rock": {  
  6.         "scissors": "你赢了!",  
  7.         "paper": "你输了!"  
  8.     },  
  9.     "paper": {  
  10.         "rock": "你赢了!",  
  11.         "scissors": "你输了!"  
  12.     },  
  13.     "scissors": {  
  14.         "paper": "你赢了!",  
  15.         "rock": "你输了!"  
  16.     }  
  17. }  
  18. # 循环玩5局游戏  
  19. for i in range(5):  
  20.     # 生成随机选择  
  21.     player_choice = random.choice(["rock", "paper", "scissors"])  
  22.     computer_choice = random.choice(["rock", "paper", "scissors"])  
  23.     print("你的选择:{}".format(player_choice))  # 输出玩家选择  
  24.     print("电脑的选择:{}".format(computer_choice))  # 输出电脑选择  
  25.   
  26.     # 判断胜负关系并输出结果  
  27.     if player_choice == computer_choice:  
  28.         print("平局!")  # 如果玩家和电脑选择一样,则平局  
  29.     elif rules[player_choice][computer_choice] == "你赢了!":  
  30.         print(rules[player_choice][computer_choice])  # 如果玩家选择战胜电脑选择,则输出玩家胜利信息  
  31.     else:  
  32.         print(rules[computer_choice][player_choice])  # 如果电脑选择战胜玩家选择,则输出电脑胜利信息
复制代码
实现方式五:while循环

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

  • 增加了用户交互环节,让用户可以选择自己出拳或者输入r随机出拳的功能;
  • 记录了游戏结果统计变量(比如用户胜利场数、电脑胜利场数和回合数),并在游戏结束时打印比分结果;
  • 在满足三局两胜的条件时结束游戏,并询问用户是否再次开启游戏;
  1. import random
  2. # 定义一个字典,用于映射石头剪刀布的胜负规则
  3. rps_dict = {'石头': '剪刀', '剪刀': '布', '布': '石头'}
  4. # 初始化用户选择和电脑选择
  5. user_choice = None
  6. computer_choice = None
  7. # 初始化游戏结果统计变量
  8. user_win_count = 0
  9. computer_win_count = 0
  10. round_count = 0
  11. # 使用while循环实现猜拳小游戏
  12. while True:
  13.     # 打印提示信息
  14.     print("欢迎来到猜拳游戏!")
  15.     print("请输入石头、剪刀或布(输入r表示随机选择):")
  16.     # 获取用户输入
  17.     user_input = input().strip().lower()
  18.     # 如果用户输入为r,则随机选择石头、剪刀或布
  19.     if user_input == 'r':
  20.         computer_choice = random.choice(list(rps_dict.values()))
  21.     # 如果用户输入为有效的选项,则将其转换为对应的值并赋值给user_choice和computer_choice
  22.     elif user_input in list(rps_dict.keys()):
  23.         user_choice = user_input
  24.         computer_choice = rps_dict[user_input]
  25.     # 如果用户输入无效,则提示错误信息并继续循环
  26.     else:
  27.         print("输入无效,请重新输入!")
  28.         continue
  29.     # 判断胜负并输出结果
  30.     if user_choice == computer_choice:
  31.         print("平局!")
  32.     elif (user_choice == '石头' and computer_choice == '剪刀') or \
  33.          (user_choice == '剪刀' and computer_choice == '布') or \
  34.          (user_choice == '布' and computer_choice == '石头'):
  35.         print("恭喜你,你赢了!")
  36.         user_win_count += 1
  37.     else:
  38.         print("很遗憾,你输了。")
  39.         computer_win_count += 1
  40.     # 打印本局游戏的结果
  41.     print(f"你出了{user_choice},电脑出了{computer_choice}")
  42.     print(f"当前比分:你 {user_win_count} - {computer_win_count} 电脑\n")
  43.     # 增加回合数并判断是否达到三局两胜的条件
  44.     round_count += 1
  45.     if user_win_count == 2:
  46.         print("你已经获得三局两胜了,你赢了!")
  47.         break
  48.     elif computer_win_count == 2:
  49.         print("很遗憾,电脑获得了三局两胜,你输了!")
  50.         break
  51.     # 根据用户的选择决定是否继续游戏
  52.     replay = input("是否再玩一局?(y/n)").strip().lower()
  53.     if replay != 'y':
  54.         break
  55. # 询问用户是否再次开启游戏
  56. play_again = input("是否再次开启游戏?(y/n)").strip().lower()
  57. if play_again == 'y':
  58.     exec(open(__file__).read())
  59. else:
  60.     print("游戏结束!")
复制代码
实现方式六:函数

对while循环的代码进行重构使用函数进行优化
  1. import random
  2. from time import sleep
  3. # 定义一个字典,用于映射石头剪刀布的胜负规则
  4. rps_dict = {'石头': {'name': '石头', 'defeat': '布'},
  5.             '剪刀': {'name': '剪刀', 'defeat': '石头'},
  6.             '布': {'name': '布', 'defeat': '剪刀'}}
  7. # 清屏函数,用于在每次输出前清空屏幕
  8. def clear_screen():
  9.     print('\033c', end='')
  10. # 美化输出函数,用于打印美观的输出界面
  11. def print_beautiful(message):
  12.     print('='*50)
  13.     print(f"{message:^50}")
  14.     print('='*50)
  15. # 获取用户输入函数,用于获取用户选择
  16. def get_user_choice():
  17.     while True:
  18.         user_input = input("请选择 石头、剪刀、布:")
  19.         if user_input not in rps_dict:
  20.             print_beautiful("选择无效,请重新选择")
  21.         else:
  22.             break
  23.     return rps_dict[user_input]
  24. # 电脑随机选择函数
  25. def get_computer_choice():
  26.     return random.choice(list(rps_dict.values()))
  27. # 判断胜负函数
  28. def judge(user_choice, computer_choice):
  29.     if user_choice == computer_choice:
  30.         result = "平局!"
  31.         winner = None
  32.     elif user_choice['defeat'] == computer_choice['name']:
  33.         result = "很遗憾,你输了。"
  34.         winner = 'computer'
  35.     else:
  36.         result = "恭喜你,你赢了!"
  37.         winner = 'user'
  38.     return result, winner
  39. # 打印结果函数
  40. def print_result(result, user_choice, computer_choice):
  41.     print_beautiful(result)
  42.     sleep(1)
  43.     print(f"你出了【{user_choice['name']}】,电脑出了【{computer_choice['name']}】")
  44. # 根据胜负结果更新胜利次数函数
  45. def update_win_count(winner, win_count):
  46.     if winner == 'user':
  47.         win_count['user'] += 1
  48.     elif winner == 'computer':
  49.         win_count['computer'] += 1
  50. # 打印当前比分函数
  51. def print_score(win_count):
  52.     print(f"当前比分:你 {win_count['user']} - {win_count['computer']} 电脑\n")
  53. # 判断是否达成胜利条件函数
  54. def check_victory(win_count):
  55.     if win_count['user'] == 2:
  56.         print_beautiful("恭喜你,你已经获得三局两胜了,你赢了!")
  57.         return True
  58.     elif win_count['computer'] == 2:
  59.         print_beautiful("很遗憾,电脑获得了三局两胜,你输了!")
  60.         return True
  61.     else:
  62.         return False
  63. # 再玩一局函数
  64. def ask_replay():
  65.     while True:
  66.         replay = input("是否再玩一局?(y/n)").strip().lower()
  67.         if replay not in ['y', 'n']:
  68.             print_beautiful("输入无效,请重新输入")
  69.         else:
  70.             break
  71.     return replay == 'y'
  72. # 游戏结束函数
  73. def game_over():
  74.     print_beautiful("游戏结束!")
  75.     sleep(2)
  76. # 主函数,实现游戏逻辑
  77. def main():
  78.     clear_screen()
  79.     print_beautiful("欢迎来到猜拳游戏!")
  80.     win_count = {'user': 0, 'computer': 0}
  81.     while True:
  82.         user_choice = get_user_choice()
  83.         computer_choice = get_computer_choice()
  84.         result, winner = judge(user_choice, computer_choice)
  85.         print_result(result, user_choice, computer_choice)
  86.         update_win_count(winner, win_count)
  87.         print_score(win_count)
  88.         if check_victory(win_count):
  89.             if not ask_replay():
  90.                 break
  91.             else:
  92.                 win_count = {'user': 0, 'computer': 0}
  93.                 clear_screen()
  94.             
  95.     game_over()
  96. if __name__ == '__main__':
  97.     main()
复制代码
来源:https://www.cnblogs.com/Hang666/p/17472848.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具