课程 9:石头剪刀布游戏

📚 学习目标

游戏规则

石头剪刀布是一种经典的猜拳游戏,双方同时出拳,规则如下:

核心概念

1. 用户输入处理

使用input()函数获取用户输入,并使用lower()方法将输入转换为小写,确保程序能处理不同大小写的输入。

2. 随机数生成

使用random.choice()函数从列表中随机选择一个元素,模拟计算机的随机选择。

3. 条件判断

使用if/elif/else语句和逻辑运算符来判断游戏胜负。

基础实现

以下是一个基础的石头剪刀布游戏实现:

# 石头剪刀布游戏 - 基础版本
import random

# 定义可选择的选项
options = ['rock', 'paper', 'scissors']

# 获取用户输入并转换为小写
user = input('请输入你的选择(rock/paper/scissors):').lower()

# 计算机随机选择
computer = random.choice(options)

# 显示双方选择
print(f'你出的是:{user}')
print(f'计算机出的是:{computer}')

# 判断胜负
if user == computer:
    print('平局!')
elif (user == 'rock' and computer == 'scissors') or \
     (user == 'scissors' and computer == 'paper') or \
     (user == 'paper' and computer == 'rock'):
    print('你赢了!')
else:
    print('你输了!')

进阶实现

让我们改进游戏,添加输入验证、多轮游戏和统计功能:

# 石头剪刀布游戏 - 进阶版本
import random

def get_user_choice():
    """获取并验证用户输入"""
    while True:
        choice = input('请选择:1.石头 2.剪刀 3.布 (输入数字或名称):').lower()
        
        # 支持多种输入方式
        if choice in ['1', 'rock', '石头', 'r']:
            return 'rock'
        elif choice in ['2', 'scissors', '剪刀', 's']:
            return 'scissors'
        elif choice in ['3', 'paper', '布', 'p']:
            return 'paper'
        else:
            print('无效输入!请输入 1/2/3 或对应的名称。')

def determine_winner(user, computer):
    """判断胜负"""
    if user == computer:
        return 'tie'
    
    winning_combinations = [
        ('rock', 'scissors'),
        ('scissors', 'paper'),
        ('paper', 'rock')
    ]
    
    if (user, computer) in winning_combinations:
        return 'user'
    else:
        return 'computer'

def display_result(user, computer, result):
    """显示游戏结果"""
    choice_names = {'rock': '石头', 'scissors': '剪刀', 'paper': '布'}
    
    print(f'\n你出:{choice_names[user]}')
    print(f'电脑出:{choice_names[computer]}')
    
    if result == 'tie':
        print('结果:平局!')
    elif result == 'user':
        print('结果:你赢了!')
    else:
        print('结果:你输了!')

def main():
    """主游戏循环"""
    print('欢迎来到石头剪刀布游戏!')
    print('输入 q 退出游戏\n')
    
    wins = 0
    losses = 0
    ties = 0
    
    while True:
        user_choice = get_user_choice()
        if user_choice == 'quit':
            break
            
        computer_choice = random.choice(['rock', 'scissors', 'paper'])
        result = determine_winner(user_choice, computer_choice)
        
        display_result(user_choice, computer_choice, result)
        
        # 更新统计
        if result == 'user':
            wins += 1
        elif result == 'computer':
            losses += 1
        else:
            ties += 1
        
        print(f'\n当前战绩:胜 {wins} 负 {losses} 平 {ties}')
        
        # 询问是否继续
        continue_game = input('\n继续游戏?(y/n): ').lower()
        if continue_game not in ['y', 'yes', '是', '继续']:
            break
    
    # 显示最终统计
    total = wins + losses + ties
    if total > 0:
        win_rate = (wins / total) * 100
        print(f'\n游戏结束!')
        print(f'总游戏次数:{total}')
        print(f'胜率:{win_rate:.1f}%')

if __name__ == '__main__':
    main()

关键知识点详解

1. 字符串方法

2. 列表操作

3. 逻辑运算符

练习题目

练习 1:输入验证

修改游戏,添加更严格的输入验证,确保用户只能输入有效的选择。

练习 2:计分系统

实现一个计分系统,记录玩家的最高连胜次数和最佳胜率。

练习 3:策略分析

添加一个功能,分析玩家的出拳模式,并给出策略建议。

常见错误和调试

常见问题:

作业要求

作业 9:石头剪刀布游戏升级版

基础要求:

  1. 实现完整的石头剪刀布游戏,支持多轮对战
  2. 添加输入合法性检查,提示用户重新输入
  3. 支持中文输入(如"石头""剪刀""布"),并与英文输入兼容
  4. 实现胜负统计和胜率计算

进阶要求:

  1. 添加游戏历史记录功能
  2. 实现简单的AI策略(如根据玩家历史选择调整策略)
  3. 添加图形化界面(可选,使用tkinter)
  4. 支持保存和加载游戏数据

提交要求:

扩展阅读

了解更多关于游戏编程和Python应用开发的知识:

提示:这个项目是学习Python编程的绝佳实践。通过实现游戏逻辑、处理用户输入、管理游戏状态,你将掌握许多重要的编程概念。记得多测试、多调试,享受编程的乐趣!