Python基础语法练习题(43-44)

搞定了蛇娘游戏的基本框架后,今天我终于可以来更新练习题目了,记录两题如下。

第四十三题,整数输入验证:

复制代码
#定义一个函数,该函数用于尝试将用户输入的字符串转化成整数,如果转换成功,则返回整数,如果转换失败,则返回错误信息

#定义函数

def string_to_int():
    """
    该函数用于尝试将用户输入的字符串转化成整数,如果转换成功,则返回整数,如果转换失败,则返回错误信息
    :return: 整数或错误信息
    """

    while True:
        try:

            # 接收用户输入信息

            num = int(input('请输入一个整数:'))
            return num          # 转换成功,返回整数并结束函数

        except ValueError:
            # 转换失败:只提示,不 return,循环会自动进入下一轮重新询问
            print('输入错误,请输入一个有效的整数。')
            continue


#调用函数

print(string_to_int())

代码块思路解析如下:

我这次的任务是:让用户输入一个整数,但我根本不知道用户会不会乱输,所以他得输对了才罢休。

我是这么想的:

首先,我把这件事封装成了一个函数 string_to_int。这样外面用的时候就特别省事,一句 print(string_to_int()),拿到的保证是个正经整数,我不用在外面操心验证的事。

然后,我担心用户一次输错。 用 if 检查一次明显不够,输了错的总得让他重来吧?所以我上了 while True 死循环:只要还没拿到对的,我就一直问、一直问。那什么时候停呢?------输对了我就 return,函数一结束,循环自然就跳出去了。

接着是最关键的一步:怎么判断输没输对。 用户敲进去的东西永远是字符串,我直接拿 int() 去转。可万一他输了个 "abc",int() 是会当场"报错掀桌子"的。所以我提前用 try / except 布了个防:转换成功,一切照旧;一旦报了 ValueError,程序不会崩,而是被我接住,打印一句"输入错误,请重新输入",然后回到循环开头再问一遍。

你可能注意到我在 except 里写了个 continue。说实话它有点多余------异常处理完,循环本来就会自动进下一轮。我写它只是想表明态度:"这里就是明确地重新开始下一轮",让读代码的人(包括以后的我)一眼看明白。

总结成一句话就是: 我不停地问,试着把输入转成整数;转成了就交差走人,转失败就善意提醒一句,继续问。这就是我应对"用户输入不靠谱"的固定套路------循环 + try/except 组合拳。

第四十四题,验证年龄:

复制代码
#定义一个函数,该函数接收一个人的年龄作为参数,如果年龄不在正常范围内,则提示异常(小于0或者大于一百五)

#定义函数

def verify_age():
    """
    交互式获取并验证年龄:输入非整数或超出 0~150 范围都要求重新输入
    :return: 合法时返回年龄整数
    """
    while True:
        try:
            age = int(input('请输入您的年龄:'))
        except ValueError:
            print('输入错误,年龄必须是整数,请重新输入。')
            continue

        if age < 0 or age > 150:
            print('输入异常!年龄应在 0 到 150 之间,请重新输入。')
            continue

        return age


#调用函数

print(verify_age())

代码块思路解析如下:

这个任务还是"用户不输对就不罢休",所以我的起手式完全没变:while True 死循环 + try/except 接异常 + 只有成功才 return。

但年龄这个东西,光"是个整数"还不够------用户输个 -5 或者 999,转换是能成功的,可这年龄明显不对劲。所以我在上一题的基础上,多设了一道"范围检查"的关卡。

现在我的循环里实际上要过三关:

第一关:能不能转成整数? 我用 try 包住 int(input(...)),用户输了 "abc" 这种,ValueError 被我接住,打印提示后 continue,回去重问。

第二关:数字合不合范围? 注意我把这个检查放在了 try/except 的外面,用独立的 if 来判。这是有讲究的------except 只在"转换失败"时才触发,正常输个数字根本不进那个分支,范围检查要是塞在里面就永远轮不到执行。

两关都过了,才放行: 走到最后的 return age,函数结束,循环退出,外面 print 拿到一个绝对合法的年龄。

还有个细节我得特意说一句:范围判断我用的是 age < 0 or age > 150,这个 or 不能换成 and。因为一个数不可能"既小于 0 又大于 150",用 and 的话条件永远不成立,等于这道关卡形同虚设。而 or 才是我要的意思------两头随便越哪一边,都算异常。

总结: 和第 43 题同一个骨架,只是我学聪明了------先管"格式对不对"(try/except 管类型),再管"内容合不合理"(独立 if 管范围),哪个不合格就 continue 重来,全合格了才 return 交卷。

相关推荐
晨曦中的暮雨1 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪2 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风2 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
在世修行4 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885724 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI4 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
信誓旦旦的程序猿5 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫5 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
下一站春风里5 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法