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

Python罗马数字转整数开发:如何处理非法输入返回'Try again'

罗马数字转整数功能改造方案

现有代码存在两个核心问题:

  • 未做输入合法性校验:输入包含阿拉伯数字、普通字符串等非罗马字符时,读取罗马映射字典会抛出KeyError直接中断运行
  • 范围校验不完整:仅校验了转换结果的上限,未校验下限,空输入、无效组合转换后的值不符合要求

修改后可直接运行的完整代码

class Solution(object):
    def romanToInt(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 预校验:所有字符必须是合法罗马字符
        valid_roman_chars = {'I', 'V', 'X', 'L', 'C', 'D', 'M'}
        for char in s:
            if char not in valid_roman_chars:
                raise ValueError("非法罗马字符")
        
        roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
        i = 0
        num = 0
        while i < len(s):
            if i+1 < len(s) and s[i:i+2] in roman:
                num += roman[s[i:i+2]]
                i += 2
            else:
                num += roman[s[i]]
                i += 1
        return num

ob1 = Solution()
message = input("Please enter your roman number: ").strip()

try:
    convert_result = ob1.romanToInt(message)
    if 1 <= convert_result <= 3999:
        print(convert_result)
    else:
        print("Try again")
except:
    # 所有异常场景统一返回提示
    print("Try again")

核心修改说明

  • 新增罗马字符预校验逻辑,输入包含非罗马字符时直接抛出异常
  • 用try...except包裹整个转换校验流程,空输入、非法组合等所有异常场景都会被统一捕获
  • 补充转换结果下限校验,仅当结果落在1~3999的合法区间时才输出转换值,其余情况统一返回提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:09:03