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

Python int(input)输入浮点数报错 ATM存款功能修复方法

问题根源

你的代码报错核心是几个逻辑错误:

  • 直接使用int(input())转换用户输入时,只要输入内容是带小数点的字符串(比如45346.4),int()无法直接解析非整数字符串,会直接抛出ValueError,根本不会执行到后续的判断逻辑。
  • is_integer()是Python中float类型的内置方法,你将输入强转为int类型后再调用这个方法,本身就会触发属性错误,判断逻辑完全无法生效。
  • 额外隐患:原代码用递归调用处理输入错误的方式存在栈溢出风险,且没有修改全局balance变量,存款操作后余额不会真正更新。
修复方法

调整输入处理逻辑:先接收输入内容转为浮点数,通过异常捕获兼容非数字输入的场景,判断浮点数是否为合法正整数后再做金额计算,用循环替代递归处理错误输入,同时正确修改全局余额变量。
修复后的完整代码如下:

def deposit():
    # 声明使用全局定义的balance变量
    global balance
    print(f'Your current balance is ${balance}\n------------------------------')
    print('How much money would you like to deposit?\n---------------------------\n You can only deposit in whole numbers')

    while True:
        input_val = input('Enter here:')
        # 捕获非数字输入的异常,避免程序崩溃
        try:
            deposit_amount = float(input_val)
        except ValueError:
            print('----------------------------\nThat is not a valid number, please try again\n----------------------------')
            continue
        
        # 判断是否为正整数:金额大于0,且小数部分为0
        if deposit_amount > 0 and deposit_amount.is_integer():
            deposit_amount = int(deposit_amount)
            balance += deposit_amount
            print(f'Your Current Balance is ${balance}\n-------------------------------\nHave a great day!')
            # 若存款完成后需要直接退出程序保留quit(),否则删除即可回到上层逻辑
            # quit()
            break
        else:
            print('----------------------------\nThat is not a whole number please try again\n----------------------------')
改动说明
  • 移除了直接强转int(input())的写法,先转成float做格式校验,同时兼容用户输入整数(比如输入100会自动转为100.0,is_integer()判断为True)和带小数的输入
  • 增加try-except异常捕获,用户输入字母、特殊符号等非数字内容时不会直接报错,会提示重新输入
  • 用while循环替代递归处理错误输入,多次输错也不会出现调用栈溢出问题
  • 增加存款金额大于0的校验,避免用户输入0、负数这类无效存款金额
  • 正确声明全局balance变量,存款后余额会真实更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:06:41