第三课:分支应用 🎮

让我们来做个小游戏吧!✨

🎮 一、石头剪刀布游戏

🎯 游戏规则回顾

石头

能砸烂剪刀 ✂️

✂️

剪刀

能剪破布 🧻

🧻

能包住石头 ✊

💻 让我们看看代码吧!

🔧 老师发现原代码有个小问题,我们一起来修正:

原来的判断条件 if paly!="石头" or paly!="剪刀" or paly!="布" 永远为真!

import random

# 📝 准备游戏选项
choices = ["石头", "剪刀", "布"]

while True:
    print("🎮 欢迎来到石头剪刀布游戏!")
    select = int(input("是否开始游戏?(0->退出, 1->开始): "))
    
    if select == 0:
        print("👋 再见!感谢游戏!")
        break
    elif select == 1:
        while True:
            # 🎯 玩家选择
            player = input("请选择(石头/剪刀/布): ")
            
            # ✅ 修正后的判断条件
            if player not in choices:
                print("🙈 输入错误,请重新选择!")
                continue
            
            # 🤖 电脑随机选择
            computer = random.choice(choices)
            
            # 📢 显示选择结果
            print(f"👤 玩家选择:{player}")
            print(f"🤖 电脑选择:{computer}")
            
            # 🏆 判断胜负
            if player == computer:
                print("🤝 平局!再来一局吧!")
            elif (player == "石头" and computer == "剪刀") or \
                 (player == "剪刀" and computer == "布") or \
                 (player == "布" and computer == "石头"):
                print("🎉 玩家胜利!太棒了!")
            else:
                print("😅 电脑胜利!继续努力!")
            
            # 问是否继续
            again = input("继续游戏吗?(y/n): ")
            if again.lower() != 'y':
                break
    else:
        print("🙉 请输入0或1哦!")
💡 点击复制代码

🔍 代码解析

  • 📦 import random:导入随机数模块
  • 🎲 random.choice():从列表中随机选择一个元素
  • 🔄 while True:无限循环,直到遇到break
  • in:检查元素是否在列表中

📖 二、新知识点讲解

🔨 神奇的split()函数

想象一下,你有一根香肠🌭,split()就像一把刀🔪,能把香肠切成小段!

🌰 例子:一行输入多个数字

# 用户输入:2 3 5
a, b, h = input().split()  # 把字符串按空格分割
print(f"a={a}, b={b}, h={h}")  # 输出:a=2, b=3, h=5

📝 分割前

"2 3 5" 📜 (一整个字符串)

✂️ 分割后

["2", "3", "5"] 📋 (三个字符串)

🎯 小数保留的魔法

有时候小数太长了,我们只想要前面几位,就像只要蛋糕🍰的一小块!

🔢 保留小数的方法

# 方法1:使用 %.1f 格式化
result = 12.566666
print("%.1f" % result)  # 输出:12.5

# 方法2:使用 f-string(更简单!)
print(f"{result:.1f}")  # 输出:12.5

# 方法3:使用 round() 函数
print(round(result, 1))  # 输出:12.6

💡 小贴士%.1f 中的 1 表示保留1位小数,f 表示浮点数!

📐 三、练习1:求梯形面积

🎯 题目描述

梯形面积公式:S = (a + b) × h ÷ 2 📏

输入:上底a、下底b、高h(一行输入,用空格分开)

输出:面积(保留1位小数)

📥 样例输入

2 3 5

📤 样例输出

12.5

# 📝 梯形面积计算程序
# 一行输入三个数,用空格分开
a, b, h = input().split()

# 🔄 把字符串转换成整数
a = int(a)
b = int(b)  
h = int(h)

# 🧮 计算面积:(上底 + 下底) × 高 ÷ 2
area = (a + b) * h / 2

# 📋 输出结果,保留1位小数
print("%.1f" % area)
💡 点击复制代码

🔍 解题步骤

  1. 📥 用split()把输入分成三个数
  2. 🔄 用int()把字符串变成数字
  3. 🧮 用公式计算面积
  4. 📋 用%.1f保留1位小数输出

🏫 四、练习2:计算教室数量

🎯 题目描述

学校要考试啦!🏫 每个教室能坐固定人数,算算需要几个教室?

输入:总人数 和 每个教室的容量(一行,空格分开)

输出:需要的教室数量

🤔 思路分析

如果1000人,每个教室坐20人:

  • 1000 ÷ 20 = 50,刚好整除 → 需要50个教室
  • 1001 ÷ 20 = 50余1,有余数 → 需要51个教室(多一个人也要多一个教室!)

📥 样例输入

1000 20

📤 样例输出

50

# 🏫 教室数量计算程序
# 输入总人数和每个教室容量
total_students, room_capacity = input().split()
total_students = int(total_students)
room_capacity = int(room_capacity)

# 🧮 计算需要几个教室
if total_students % room_capacity == 0:
    # 整除情况:刚好坐满
    rooms_needed = total_students // room_capacity
else:
    # 有余数:需要多一个教室
    rooms_needed = total_students // room_capacity + 1

print(rooms_needed)
💡 点击复制代码

🔑 重要知识点

  • // :整数除法(向下取整)
  • % :取余运算(求余数)
  • 当有余数时,说明还有学生没坐下,需要多加一个教室!

📅 五、练习3:闰年判断

🎯 题目描述

判断某一年是不是闰年 📅 闰年2月有29天哦!

输入:四位数年份

输出:是闰年输出"yes",不是输出"no"

📏 闰年规则

满足以下任意一个条件就是闰年:

  • 能被4整除 但不能 被100整除 (如:2020年)
  • 能被400整除 (如:2000年)

📥 样例输入

1996

📤 样例输出

yes

# 📅 闰年判断程序
year = int(input())

# 🧮 闰年判断逻辑
# 方法1:分两种情况判断
if year % 400 == 0:
    print("yes")  # 能被400整除 → 闰年
elif year % 100 == 0:
    print("no")   # 能被100整除但不能被400整除 → 平年
elif year % 4 == 0:
    print("yes")  # 能被4整除但不能被100整除 → 闰年  
else:
    print("no")   # 其他情况 → 平年

# 方法2:一行搞定(更简洁!)
# if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
#     print("yes")
# else:
#     print("no")
💡 点击复制代码

🔍 例子分析

✅ 闰年:

  • 2000年:400的倍数
  • 2020年:4的倍数,非100的倍数
  • 1996年:4的倍数,非100的倍数

❌ 平年:

  • 1900年:100的倍数,非400的倍数
  • 2021年:不是4的倍数
  • 2022年:不是4的倍数

💪 六、课后练习

📝 单选题 (每题2分,共10分)

1. input().split() 的作用是什么?🤔

2. "%.1f" % 12.567 的输出结果是?💫

3. 在石头剪刀布游戏中,random.choice([1,2,3]) 会返回什么?🎲

4. 判断2024年是否为闰年,下面哪个条件正确?📅

5. 计算教室问题中,1001个学生,每个教室20人,需要几个教室?🏫

🔗 连线题 (每题2分,共10分)

请将左边的代码和右边的功能连起来:

📝 代码

random.choice(list)
%.2f
input().split()
year % 4 == 0
total // capacity + 1

🎯 功能

按空格分割输入
从列表随机选择
向上取整除法
保留两位小数
判断被4整除

🎊 本课总结

今天我们学会了:

  • 🎮石头剪刀布游戏:复合条件判断
  • ✂️split()函数:分割字符串
  • 📐小数保留:%.1f 格式化
  • 🏫向上取整:余数判断
  • 📅闰年判断:复杂逻辑条件

🎯 学习小贴士

🔧 调试技巧:出错时先检查语法,再检查逻辑

🧮 数学应用:编程常用数学公式和逻辑

🎨 创新思维:试着修改游戏,加入新功能

🤝 合作学习:和同学一起讨论不同解法

🚀 下节课预告

我们将学习循环结构,让程序能够重复做事情,就像小机器人一样勤劳!🤖

预习任务:思考一下,生活中有哪些重复的事情可以让程序帮我们做?🤔✨