Estoy escribiendo en Python3. Creé dos listas en mi código y quiero 'conectarlas' en un bucle como fracciones. ¿Hay alguna posibilidad de hacerlo de otra manera que no sea el uso de la biblioteca de fracciones? Lamentablemente no puedo usarlo porque es el requisito de la tarea. El problema surge cuando la fracción es un número de coma flotante (por ejemplo, 1/3). ¿Como puedó resolver esté problema?

Este es un ejemplo:

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
olczig 26 may. 2020 a las 22:36

5 respuestas

Puede usar un bucle para calcular la fracción mediante el código simple a continuación

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)

El resultado de ayb va a ser

269 400
0
Youstanzr 26 may. 2020 a las 20:00
p = [3, 2, 3]
q = [3, 5, 9]

frac = []
f = 0
for i in p:
    for j in q:
        f = i/j #change p for i, and q for j
        if f not in frac:
            frac.append(f)

Esto debería hacer que se ejecute, ya que antes dividía una lista por una lista, y no un número en una lista por otro número en una lista

Espero que esto ayude

0
SuperCoder 26 may. 2020 a las 20:03

(0.33).as_integer_ratio() podría funcionar para su problema. Obviamente 0.33 sería reemplazado por cualquier flotador.

Según esta pregunta,

def float_to_ratio(flt):
    if int(flt) == flt:
        return int(flt), 1
    flt_str = str(flt)
    flt_split = flt_str.split('.')
    numerator = int(''.join(flt_split))
    denominator = 10 ** len(flt_split[1])
    return numerator, denominator

Esto también es una solución.

0
Johnny 26 may. 2020 a las 19:39

Si entendí correctamente, su problema no está en "cómo convertir flotadores en fracciones" sino en "cómo obtener una representación de cadena de fracción a partir de matrices de números", ¿verdad?

En realidad, puedes hacerlo en una línea:

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

list(map(lambda pair: f"{pair[0]}/{pair[1]}", [(x, y) for x in p for y in q])))

Explicando:

map: recibe una función y un iterador, pasando cada elemento del iterador a esa función.

[(x, y) for x in p for y in q] - este es un list comprehension, está generando pares de números "para cada x en la matriz p para cada y en la matriz q".

lambda pair: este es un anonymous function que recibe un argumento pair (que sabemos que será un tuple '(x, y)') y devuelve la cadena "x / y "(que es" par [0] / par [1] ")

Procedimientos opcionales

Eliminar ceros en el denominador

Si desea evitar fracciones imposibles (como algo por encima de 0), la comprensión de la lista debería ser esta:
[(x, y) for x in p for y in q if x != 0]

Eliminar duplicados

Además, si además de eso desea eliminar elementos duplicados, simplemente envuelva toda la lista en una operación set() (los conjuntos son iterables con elementos únicos, y convertir una lista en un conjunto elimina automáticamente los elementos duplicados): < br /> set([(x, y) for x in p for y in q if x != 0])

Eliminar innecesarios duplicados de signos negativos

La comprensión de la lista se está haciendo un poco más grande, pero aún está bien:
set([(x, y) if x>0 or y>0 else (-x,-y) for x in p for y in q if x != 0])
Explicando: si x>0 o y>0, esto significa que solo uno de ellos podría ser un número negativo, así que está bien, devuelve (x, y). Si no, eso significa que ambos son negativos, por lo que deberían ser positivos, luego devolver (-x, -y).

Pruebas

El resultado final del guión es:

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'] 

0
Teodoro Bertolozzi Mendes 26 may. 2020 a las 20:51

Puedes usar las fracciones. Tipo de fracción.

  1. importar esto usando: desde fracciones importar fracción
  2. emite tu ecuación f f = p / q con Fraction; f = Fracción (p / q)
  3. luego use la conversión de cadena también; f = str (Fracción (p / q))

    from fractions import Fraction
    f = str(Fraction(p/q))
    
1
triedit 26 may. 2020 a las 19:47