如何编写Python程序循环获取有效八进制输入并转十进制
修复八进制转十进制的循环输入程序
你的代码报错是因为还没完成所有字符的合法性检查就调用了int(n,8)。比如输入1079时,第一个字符1通过检查后立刻执行转换,但字符串里包含9,不符合八进制规则,int()直接抛出ValueError导致程序终止。
下面是两种可行的修复方案:
方案一:先完整验证所有字符合法性
先遍历输入的每个字符,确认都是0-7的数字,再进行转换,避免提前触发异常:
while True: n = input("Enter an octal value to convert to decimal, binary and hexadecimal form:").strip() # 处理空输入 if not n: print("Invalid input: cannot be empty") continue # 检查每个字符是否符合八进制规则 is_valid_octal = True for char in n: if not char.isdigit() or char in {'8', '9'}: is_valid_octal = False break if is_valid_octal: oct_to_dec = int(n, 8) print(f"{n} in Decimal is: {oct_to_dec}") # 可选:输出二进制和十六进制 print(f"{n} in Binary is: {bin(oct_to_dec)}") print(f"{n} in Hexadecimal is: {hex(oct_to_dec)}") # 如需输入合法后退出循环,取消下面的注释 # break else: print("Invalid octal.")
方案二:用try-except捕获转换异常
利用Python的异常处理机制,尝试直接转换,捕获ValueError判断输入合法性,代码更简洁:
while True: n = input("Enter an octal value to convert to decimal, binary and hexadecimal form:").strip() if not n: print("Invalid input: cannot be empty") continue try: oct_to_dec = int(n, 8) print(f"{n} in Decimal is: {oct_to_dec}") # 可选:输出二进制和十六进制 print(f"{n} in Binary is: {bin(oct_to_dec)}") print(f"{n} in Hexadecimal is: {hex(oct_to_dec)}") # 如需输入合法后退出循环,取消下面的注释 # break except ValueError: print("Invalid octal.")
补充说明
- 两种方案都处理了空输入的情况(strip后为空字符串)
- 如果希望用户输入合法后退出循环,只需在打印结果后添加
break语句
内容的提问来源于stack exchange,提问作者meow
相关产品推荐
相关产品推荐

