You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码重构咨询:重复输入校验函数能否简化?

重构重复的输入校验函数(保留全局变量)

嘿,作为Python新手能注意到代码重复并想着重构,这点超棒!你的两段enterA和enterB函数逻辑几乎完全一致,只是操作的全局变量不同,当然可以简化重构,而且完全能保留你需要的aCount和bCount全局变量。

核心思路:抽离通用逻辑

我们可以把重复的输入校验、循环、异常处理逻辑抽成一个独立的工具函数,让它只负责获取合法的正浮点数;然后原来的enterA和enterB只需要做一件事:把工具函数返回的合法值赋值给对应的全局变量。

重构后的代码

# 先初始化全局变量(如果之前未初始化)
aCount = 0.0
bCount = 0.0

def get_positive_float(message):
    """通用函数:获取用户输入的正浮点数,不合法则循环提示"""
    while True:
        try:
            value = float(input(message))
            # 明确断言错误信息,方便后续维护
            assert value > 0.00, "Value must be greater than 0"
            return value
        except (ValueError, AssertionError):
            # 捕获具体异常类型,避免隐藏未知bug
            print("Error, please enter a positive float number")

def enterA(message):
    global aCount
    aCount = get_positive_float(message)

def enterB(message):
    global bCount
    bCount = get_positive_float(message)

为什么这样更好?

  • 消除重复代码:如果后续需要新增类似的enterC、enterD函数,只需要复制enterA的结构,改一下全局变量名就行,不用再复制整段循环和校验逻辑。
  • 可维护性更高:如果要修改提示语、调整校验规则(比如改成大于0.01),只需要在get_positive_float里改一次,所有调用它的函数都会生效。
  • 更安全:原来的代码捕获了所有except,容易隐藏其他未知错误;重构后只捕获ValueError(输入无法转成float)和AssertionError(值不大于0),避免意外吞掉其他异常。

小建议(可选进阶)

如果你的项目后续会扩展,全局变量可能会让代码变得难以追踪。可以考虑用类来管理这些计数变量,比如:

class CounterManager:
    def __init__(self):
        self.aCount = 0.0
        self.bCount = 0.0

    def get_positive_float(self, message):
        while True:
            try:
                value = float(input(message))
                assert value > 0.00
                return value
            except (ValueError, AssertionError):
                print("Error, enter positive float")

    def enterA(self, message):
        self.aCount = self.get_positive_float(message)

    def enterB(self, message):
        self.bCount = self.get_positive_float(message)

# 使用方式
manager = CounterManager()
manager.enterA("Enter A: ")
print(manager.aCount)

不过这个是进阶用法,如果你现在只需要满足当前需求,前面的重构方案完全足够啦。

内容的提问来源于stack exchange,提问作者r0llie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:12:50