Python整数转罗马数字代码输入超出范围无法循环重新请求问题
罗马数字转换工具输入校验修复方案
问题根因
你的代码仅对「输入是否为合法整数」做了循环校验,1-3999的数值范围判断逻辑完全放在输入循环之外,只要用户输入的内容可以转为整数,不管数值是否符合要求,输入循环都会直接终止,自然不会重新触发输入。
修复后完整代码
def int_to_roman(num): val = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ] syb = [ "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" ] roman_num = '' i = 0 while num > 0: for _ in range(num // val[i]): roman_num += syb[i] num -= val[i] i += 1 return roman_num def roman_to_int(numeral): rom_val = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} int_val = 0 for i in range(len(numeral)): if i > 0 and rom_val[numeral[i]] > rom_val[numeral[i - 1]]: int_val += rom_val[numeral[i]] - 2 * rom_val[numeral[i - 1]] else: int_val += rom_val[numeral[i]] return int_val while True: try: message = int(input("Enter your integer number: ")) except ValueError: print("Invalid input. Try again!") continue # 新增数值范围校验,不满足就继续循环 if message < 1 or message > 3999: print("Invalid number. Try again!") continue # 所有校验通过才跳出输入循环 break print ('Integer to Roman: ',int_to_roman(message))
修改点说明
- 将数值范围校验逻辑整合进输入的
while True循环内部,只有输入同时满足「为合法整数」、「数值在1-3999区间内」两个要求,才会终止输入流程 - 移除了循环外冗余的范围判断分支,拿到合法数值后直接执行转换输出
内容的提问来源于stack exchange,提问作者code_program
相关产品推荐
相关产品推荐

