Python新手求助:如何将输入的分数转换为浮点数?
解决分数转浮点数的问题
你遇到的问题是float()和decimal.Decimal()都无法直接解析形如'1/3'的分数字符串——它们只支持标准数字格式。下面给你几种可行的解决方案:
方法1:手动拆分分子分母(最安全)
手动将输入的分数字符串按/分割,转成整数后计算商:
def parse_input(input_str): if '/' in input_str: numerator, denominator = input_str.split('/') return float(numerator) / float(denominator) else: # 兼容普通数字输入 return float(input_str)
把你代码里所有float(input(...))替换成这个函数即可,比如:
x = parse_input(input("Side A: ")) y = parse_input(input("Angle b: "))
这种方法完全可控,没有安全风险,适合自用工具。
方法2:使用fractions.Fraction(精度更可靠)
Python标准库fractions可以直接解析分数字符串,再转成浮点数:
from fractions import Fraction def parse_input(input_str): return float(Fraction(input_str))
它能处理更复杂的分数格式(比如'-2/5'、'3/4'),计算精度比手动拆分更稳定。
方法3:使用eval(简单但有风险)
如果只是自己使用,不怕恶意输入,可以直接用eval计算字符串表达式:
def parse_input(input_str): return float(eval(input_str))
⚠️ 注意:这个方法绝对不能用于接收未知用户输入的场景,eval会执行任何传入的代码,存在安全隐患。
修改后的完整示例代码
以方法1为例,修改你的chooseradians函数:
def parse_input(input_str): if '/' in input_str: numerator, denominator = input_str.split('/') return float(numerator) / float(denominator) else: return float(input_str) def chooseradians(): choice = input("1. Side Side Side\n2. Side Angle Side\n3. Angle Side Angle") if choice == '1': x = parse_input(input("Side A: ")) y = parse_input(input("Side B: ")) z = parse_input(input("Side C: ")) sidesidesiderad(x, y, z) elif choice == '2': x = parse_input(input("Side A: ")) y = parse_input(input("Angle b: ")) z = parse_input(input("Side C: ")) SideAngleSiderad(x, y, z) elif choice == '3': x = parse_input(input("Angle a: ")) y = parse_input(input("Side B: ")) z = parse_input(input("Angle c: ")) #AngleSideAnglerad(x, y, z)
另外,代码里把choice转成字符串后和str(1)比较的操作可以简化,直接用choice == '1'即可——因为input()返回的本身就是字符串。
内容的提问来源于stack exchange,提问作者Jayant Goyal
相关产品推荐
相关产品推荐

