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 交卷。

相关推荐
10年前端老司机1 小时前
LangChain 五种工具定义方式踩坑总结
python·langchain·llm
坤坤子吖1 小时前
Python基础语法学习:列表和元组
开发语言·笔记·python·学习
可乐鸡翅yeah_1 小时前
新手梳理:HLS 线上问题,哪些该提给 CDN,哪些该找后端切片服务
开发语言·前端·javascript·vue.js·网络协议·http·m3u8在线
zwd20051 小时前
Manim arrange 和 arrange_in_grid 用法详解:buff、aligned_edge、rows/cols(0.21.0 实测)
前端·python·edge
外收内放1 小时前
Python基础语法练习题(拓展2)
python·pygame
“AI国潮设计-小江”2 小时前
《Python+SDXL实战:用ControlNet批量生成“英歌舞草莓蛋糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
为啥全要学2 小时前
大模型流式输出过滤敏感词
开发语言·python
小溪学编程2 小时前
C语言篇:语言结构
c语言·开发语言·算法
老王爱玩车2 小时前
字符串和字符串函数
c语言·开发语言·数据结构·学习