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

PyCharm中纸张尺寸转换器为何报‘Invalid literal for int() with base 10’错误?

解决纸张尺寸转换器的ValueError及逻辑问题

错误原因

ValueError: invalid literal for int() with base 10: '' 是因为你直接将空字符串传给了int()函数——当输入框为空就回车时,input()返回空字符串,转整数必然报错。

另外程序还有两个隐性问题:

  1. 无限循环:run_again始终为True,程序会一直重复运行,你说的"第二次运行异常"其实是循环的下一轮输入出错。
  2. 大尺寸纸张计算错误:当grade < 4时,仅执行了一次尺寸放大,但recur = 4 - grade(比如grade=2时recur=2),需要循环对应次数才能得到正确的A2尺寸。

修正后的代码

run_again = True
while run_again:
    x = 210  # 初始为A4短边
    k = 2 ** 0.5  # √2
    # 输入验证:处理空输入、非数字输入
    while True:
        grade_input = input("Grade A: ")
        if not grade_input.strip():
            print("请输入有效数字(如3、4、5)")
            continue
        try:
            grade = int(grade_input)
            break
        except ValueError:
            print("输入无效,请输入整数")
    
    if grade > 4:  # 尺寸小于A4
        recur = grade - 4
        for i in range(recur):
            x = (x * k) / 2
            y = x * k
    elif grade < 4:  # 尺寸大于A4
        recur = 4 - grade
        y = x * k  # 先初始化A4的长边
        for i in range(recur):
            # A系列放大规则:新短边=原长边,新长边=原短边×2
            x, y = y, 2 * x
    else:  # grade ==4
        y = x * k
    
    x = round(x, 2)
    y = round(y, 2)
    print(f"{x}mm x {y}mm")
    
    # 询问是否继续运行
    while True:
        choice = input("是否继续?(y/n): ").strip().lower()
        if choice in ('y', 'n'):
            run_again = (choice == 'y')
            break
        print("请输入y或n")

核心修正说明

  • 输入校验:通过try-except捕获非数字输入,同时判断空输入,避免直接转int报错。
  • 修复大尺寸计算:对grade <4的情况添加循环,严格遵循A系列纸张的放大规则,确保大尺寸(如A2、A1)计算正确。
  • 添加循环终止逻辑:每次计算后询问用户是否继续,避免无限循环。
  • 代码简化:使用f-string替代format,让输出代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:54:52