Encontré un programa para cambiar el dígito 5 con 6 en python, pero el problema es que lo tengo en python2 y si lo cambio en python3 y lo vuelvo a ejecutar, me da un resultado extraño.

La fuente del código de Python 2 es

http://www.geeksforgeeks.org/replace-0-5-input-integer/

Y mi código completo de python3 es

def convert5to6rec(num):

    # Base case for recurssion termination
    if(num == 0):
        return 0

    # Extract the last digit and change it if needed
    digit = num % 10


    if(digit == 5):
        digit = 6

    # Convert remaining digits and append the last digit
    return convert5to6rec(num/10) * 10 + digit

# It handles 0 to 5 calls convert0to5rec() for other numbers
def convert5to6(num):

    if(num == 5):
        return 6
    else:
        return convert5to6rec(num)


# Driver Program
num = 520
print(convert5to6(num))

La salida que da es 170642.43254304124

Entonces, ¿alguien puede señalar ese error tonto que dejé

PD: Necesito el programa para reemplazar los dígitos 5 con 6.

La salida esperada debe ser 620

0
Yash Kumar Atri 30 oct. 2017 a las 05:20

3 respuestas

La mejor respuesta

Cambie num/10 a num//10. En Python 3, la división de enteros con el operador / produce un resultado de coma flotante. Para obtener la división de enteros, debe usar el operador //.

4
Tom Karzes 30 oct. 2017 a las 02:27

La razón por la que no funciona en Python 3 es por la diferencia en el comportamiento de la división en Python 2 y 3. En Python 2, / hace una división de piso, mientras que en Python 3, es una verdadera división.

Entonces, en Python 2,

In [1]: 11 / 2
Out[1]: 5

En python 3,

In [2]: 11/2
Out[2]: 5.5

Para hacer la división del piso en Python 3, necesitará usar // en lugar de /. Por lo tanto, solo necesita reemplazar / con // en su código.

0
Ankur Ankan 30 oct. 2017 a las 02:30

En lugar de hacerlo matemáticamente, puede convertir el entero en una cadena, reemplazar los 5 con 6 y convertirlo de nuevo en un entero. La forma más fácil de hacer esto sería

int(str(num).replace('5', '6'))
1
Brent Vollebregt 30 oct. 2017 a las 02:27