流程控制进阶:从闰年判断到猜数游戏的逻辑复盘与代码实现

【前言】

在Python的学习曲线中,掌握流程控制意味着你已经具备了编写复杂逻辑的能力。今天复盘第四章的4道实战题,重点分析其中的逻辑陷阱,并尝试使用Python 3.11的新特性match来优化代码结构。

【案例一:逻辑运算的优先级 ------ 闰年判断】

问题复现

闰年判断公式:(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

代码分析

这里不仅仅是if语句,更考察逻辑运算符的优先级。and的优先级高于or,所以虽然不加括号也能跑,但为了代码可读性,建议将并列条件用括号括起来。

关键代码片段

python 复制代码
year=eval(input('请输入一个四位的年份:'))
if (year%4==0 and year%100!=0) or year%400==0:
    print(year,'年是闰年')
else:
    print(year,'年是平年')

思考 :能不能用更简洁的日历库calendar来实现一行代码判断?答案是可以的,但手动实现逻辑更能锻炼编程思维。

【案例二:模式匹配的最佳实践 ------ 模拟10086】

传统写法 vs Python 3.11 新写法

传统的菜单查询通常使用冗长的if...elif...else。在Python 3.11中,我们可以使用结构模式匹配match...case,这让代码的可读性大幅提升,接近自然语言。

代码实现(推荐使用match)

python 复制代码
#(1)初始化变量
answer='y'
#(2)条件判断
while answer=='y':
    #(3)循环操作,语句块
    print('---------------欢迎使用10086查询功能---------------------')
    print('1.查询当前余额')
    print('2.查询当前的剩余流量')
    print('3.查询当前的剩余通话时长')
    print('0.退出系统')
    choice=input('请输入您要执行的操作:') # input的结果是字符串类型
    if choice=='1':
        print('当前余额为:234.5元')
    elif choice=='2':
        print('当前的剩余流量为:4GB')
    elif choice=='3':
        print('当前的剩余通话时间长为:300分钟')
    elif choice=='0':
        print('程序退出,谢谢您的使用')
        break
    else:
        print('对不起,您输入的有误,请重新输入')
    # (4)改变变量
    answer=input('还继续操作吗?y/n')
else: #while...else
    print('程序退出,谢谢您的使用')

技术点match不仅匹配简单的值,还可以解构复杂数据结构,这是Python向函数式语言靠拢的一大步。 【案例三:双重循环控制流 ------ 九九乘法表】

难点突破

很多新手在做这题时,会输出一个正方形的表,而不是三角形。核心在于内层循环的范围range(1, i+1)

技术细节

  • printend参数:默认是\n(换行),修改为\t(制表符)可以实现横向对齐。
  • 外层循环i:控制行(1到9)。
  • 内层循环j:控制列,每行的列数等于行号。

【案例四:二分查找思维的雏形 ------ 猜数游戏】

算法思维

虽然题目没要求限制猜测次数,但这是一个很好的引入"二分查找"思想的场景。如果每次猜中间数,效率最高。

代码实现

使用random.randint(1, 100)生成随机数,通过while True循环直到猜中为止。

python 复制代码
import random
rand=random.randint(1,100) # 产生1-100之间的随机数
count=1 # 记录猜数的次数
while count<=10:
    number=eval(input('在我心中有个数,1-100之间,请你猜一猜:'))
    if number==rand:
        print('猜对了')
        break
    elif number>rand:
        print('大了')
    else:
        print('小了')
    count+=1 # 每猜一次count次数要加1
# 判断次数
if count<=3:
    print('真聪明,一共猜了',count,'次')
elif count<=6:
    print('还可以,一共猜了',count,'次')
else:
    print('猜的次数有点多啊,一共猜了',count,'次')

扩展思考 :如果要求在7次内必须猜中,代码该怎么写?(提示:记录次数并使用break

【总结】 这4道题涵盖了选择结构、多重分支、嵌套循环和随机数生成。特别是match语法的应用,建议大家在日常开发中多尝试使用,写出更Pythonic的代码。


相关推荐
多米Domi01115 分钟前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
人工智能训练6 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
yaoming1686 小时前
python性能优化方案研究
python·性能优化
码云数智-大飞7 小时前
使用 Python 高效提取 PDF 中的表格数据并导出为 TXT 或 Excel
python
biuyyyxxx8 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
极客数模8 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
小鸡吃米…10 小时前
机器学习中的代价函数
人工智能·python·机器学习
Li emily11 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
m0_5613596711 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov11 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲