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
相关产品推荐
相关产品推荐

