Python 将浮点数转换为分数

Python 将浮点数转换为分数,python,python-3.x,fractions,Python,Python 3.x,Fractions,我在用蟒蛇3写作。 我在代码中创建了两个列表,我想将它们作为分数“连接”在一个循环中。除了使用分数库,还有没有其他方法可以做到这一点?不幸的是,我不能使用它,因为这是任务要求。当分数是浮点数(例如1/3)时,就会出现问题。 我怎样才能解决这个问题 下面是一个例子: p = [1,2,3] q = [3,5,9] frac = [] for i in p: for j in q: f = i/j if f not in frac:

我在用蟒蛇3写作。 我在代码中创建了两个列表,我想将它们作为分数“连接”在一个循环中。除了使用分数库,还有没有其他方法可以做到这一点?不幸的是,我不能使用它,因为这是任务要求。当分数是浮点数(例如1/3)时,就会出现问题。 我怎样才能解决这个问题

下面是一个例子:

p = [1,2,3]
q = [3,5,9]

frac = []
    for i in p:
      for j in q:
        f = i/j
        if f not in frac:
          frac.append(f)



(0.33)。as\u integer\u ratio()
可以解决您的问题。显然,
0.33
将被任何浮动所取代

这也是一个解决方案。

(0.33)。as\u integer\u ratio()
可以解决您的问题。显然,
0.33
将被任何浮动所取代


这也是一个解决方案。

您可以使用分数。分数类型

  • 导入此项使用:从分数导入分数
  • 用分数来计算你的f方程f=p/q;f=分数(p/q)
  • 然后也使用字符串转换;f=str(分数(p/q))


  • 您可以使用分数。分数类型

  • 导入此项使用:从分数导入分数
  • 用分数来计算你的f方程f=p/q;f=分数(p/q)
  • 然后也使用字符串转换;f=str(分数(p/q))


  • 您可以使用一个循环,通过下面的简单代码计算出分数

    x = 0.6725
    a = 0
    b = 1
    while (x != a/b):
        if x > a/b:
            a += 1
        elif x < a/b:
            b += 1
    print(a, b)
    

    您可以使用一个循环,通过下面的简单代码计算出分数

    x = 0.6725
    a = 0
    b = 1
    while (x != a/b):
        if x > a/b:
            a += 1
        elif x < a/b:
            b += 1
    print(a, b)
    

    如果我理解正确,你的问题不是“如何将浮点转换为分数”,而是“如何从数字数组中获取分数的字符串表示”,对吗

    实际上,您可以在一行中完成:

    p=[1,2,3]
    q=[3,5,9]
    列表(映射(lambda对:f“{pair[0]}/{pair[1]}”,[(x,y)表示p中的x表示q中的y]))
    
    解释:

    map
    -接收函数和迭代器,将迭代器的每个元素传递给该函数

    [(x,y)对于p中的x对于q中的y]
    -这是一个
    列表理解
    ,它为“数组p中的每个x对于数组q中的每个y”生成数对

    lambda pair
    -这是一个
    匿名函数
    接收一个参数
    pair
    (我们知道它将是一个
    元组
    ”(x,y)),并返回字符串“x/y”(即“pair[0]/pair[1])

    可选程序 消除分母中的零 如果您想避免不可能的分数(如超过0的分数),列表理解应该是这样的:
    [(x,y)表示x在p中表示x在q中表示y,如果x!=0]

    消除重复项 此外,如果您希望消除重复项,只需在
    set()
    操作中包装整个列表即可(集合是具有唯一元素的可重用集合,将列表转换为集合会自动删除重复元素):
    set([(x,y)表示x在p中表示x在q中表示y,如果x!=0])

    消除不必要的重复负面符号 列表的理解力越来越大,但仍然可以:
    设置([(x,y)如果x>0或y>0,否则(-x,-y)如果x!=0,p中的x代表q中的y])

    说明:如果
    x>0
    y>0
    ,这意味着其中只有一个可以是负数,因此可以返回(x,y)。如果不是,这意味着它们都是负数,所以它们应该是正数,然后返回(-x,-y)

    测试 脚本的最终结果是:

    p = [1, -1, 0, 2, 3]
    q = [3, -5, 9, 0]
    
    print(list(map(lambda pair: f"{pair[0]}/{pair[1]}", set([(x, y) if x>0 or y>0 else (-x,-y) for x in p for y in q if y != 0]))))
    
    
    # output:
    # ['3/-5', '2/-5', '1/5', '1/-5', '0/3', '0/9', '2/3', '2/9', '3/3', '-1/3', '-1/9', '0/5', '3/9', '1/3', '1/9'] 
    
    

    如果我理解正确,你的问题不是“如何将浮点转换为分数”,而是“如何从数字数组中获取分数的字符串表示”,对吗

    实际上,您可以在一行中完成:

    p=[1,2,3]
    q=[3,5,9]
    列表(映射(lambda对:f“{pair[0]}/{pair[1]}”,[(x,y)表示p中的x表示q中的y]))
    
    解释:

    map
    -接收函数和迭代器,将迭代器的每个元素传递给该函数

    [(x,y)对于p中的x对于q中的y]
    -这是一个
    列表理解
    ,它为“数组p中的每个x对于数组q中的每个y”生成数对

    lambda pair
    -这是一个
    匿名函数
    接收一个参数
    pair
    (我们知道它将是一个
    元组
    ”(x,y)),并返回字符串“x/y”(即“pair[0]/pair[1])

    可选程序 消除分母中的零 如果您想避免不可能的分数(如超过0的分数),列表理解应该是这样的:
    [(x,y)表示x在p中表示x在q中表示y,如果x!=0]

    消除重复项 此外,如果您希望消除重复项,只需在
    set()
    操作中包装整个列表即可(集合是具有唯一元素的可重用集合,将列表转换为集合会自动删除重复元素):
    set([(x,y)表示x在p中表示x在q中表示y,如果x!=0])

    消除不必要的重复负面符号 列表的理解力越来越大,但仍然可以:
    设置([(x,y)如果x>0或y>0,否则(-x,-y)如果x!=0,p中的x代表q中的y])

    说明:如果
    x>0
    y>0
    ,这意味着其中只有一个可以是负数,因此可以返回(x,y)。如果不是,这意味着它们都是负数,所以它们应该是正数,然后返回(-x,-y)

    测试 脚本的最终结果是:

    p = [1, -1, 0, 2, 3]
    q = [3, -5, 9, 0]
    
    print(list(map(lambda pair: f"{pair[0]}/{pair[1]}", set([(x, y) if x>0 or y>0 else (-x,-y) for x in p for y in q if y != 0]))))
    
    
    # output:
    # ['3/-5', '2/-5', '1/5', '1/-5', '0/3', '0/9', '2/3', '2/9', '3/3', '-1/3', '-1/9', '0/5', '3/9', '1/3', '1/9'] 
    
    

    是的,我知道,但我不能在这个特殊的任务中完成。是的,我知道,但我不能在这个特殊的任务中完成。谢谢你的解决方案。如何改进此代码以这种方式显示分数“1/3”而不是“1,3”。感谢您提供此解决方案。我怎样才能改进这段代码以这种方式显示分数“1/3”而不是“1,3”。是的,你说得对。谢谢你解决了我的问题。如何改进您的解决方案,以将示例-1/-6显示为1/6。因为在负数的情况下,2次显示“-”是没有意义的。我刚刚把它添加到awnser中,还修复了第一个过程中的一个错误(在
    p = [1, -1, 0, 2, 3]
    q = [3, -5, 9, 0]
    
    print(list(map(lambda pair: f"{pair[0]}/{pair[1]}", set([(x, y) if x>0 or y>0 else (-x,-y) for x in p for y in q if y != 0]))))
    
    
    # output:
    # ['3/-5', '2/-5', '1/5', '1/-5', '0/3', '0/9', '2/3', '2/9', '3/3', '-1/3', '-1/9', '0/5', '3/9', '1/3', '1/9']