Python食谱转换器:如何封装整数输入校验为自定义函数?
食谱程序整数输入校验的封装方案
首先得明确:你想要的amount = int(input(...)); check_int(amount)调用方式有个小问题——如果用户输入非整数,int(input(...))会直接抛出ValueError,根本走不到check_int那一步。所以更实用的做法是把输入、校验、循环重试整个逻辑封装成函数,彻底消除重复代码。
推荐方案:封装完整的输入校验函数
这个函数接收提示文本,内部自动处理输入合法性检查,直到用户输入有效整数:
def get_valid_int(prompt): while True: try: return int(input(prompt)) except ValueError: print("这不是有效的整数,请重新输入。")
调用示例
在你的程序里直接用就行,完全替代重复的代码块:
amount = get_valid_int(f"Enter in the amount for {ingredient}: ")
如果你坚持要单独的校验函数(不推荐)
如果一定要实现check_int(amount)的形式,这个函数只能用于验证已经转换好的数值,但没法避免输入阶段的异常处理,重复代码还是存在:
def check_int(value): if not isinstance(value, int): raise ValueError("输入不是整数")
调用方式(仍需写循环和异常捕获)
while True: try: amount = int(input(f"Enter in the amount for {ingredient}: ")) check_int(amount) break except ValueError: print("这不是有效的整数,请重新输入。")
这种方式没减少多少重复代码,所以还是推荐第一种方案。
额外扩展:支持食谱常用的小数用量
食谱里经常会用到小数(比如1.5勺、0.5杯),如果需要支持浮点数,可以把函数改成这样:
def get_valid_number(prompt): while True: try: return float(input(prompt)) except ValueError: print("这不是有效的数字,请重新输入。")
这样既支持整数,也支持小数,更贴合食谱换算的实际需求。
内容的提问来源于stack exchange,提问作者Alec Smith
相关产品推荐
相关产品推荐

