Python 将浮点数转换为分数
我在用蟒蛇3写作。 我在代码中创建了两个列表,我想将它们作为分数“连接”在一个循环中。除了使用分数库,还有没有其他方法可以做到这一点?不幸的是,我不能使用它,因为这是任务要求。当分数是浮点数(例如1/3)时,就会出现问题。 我怎样才能解决这个问题 下面是一个例子: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:
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
将被任何浮动所取代
每
这也是一个解决方案。您可以使用分数。分数类型
您可以使用分数。分数类型
您可以使用一个循环,通过下面的简单代码计算出分数
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']