Errores enteros en Python

Así que hice un programa muy simple que cuenta regresivamente desde 99 (canta 99 botellas de cerveza) pero sigo recibiendo 1 de 2 errores

#!/usr/bin/env python
print("This program sings the song 99 bottles of beer on the wall")
lim = input("What number do you want it to count down from?")
def sing():
    global lim
    while int(lim) >= 0:
        if int(lim) != 1 or int(lim) != 0:
            print(lim, "bottles of beer on the wall", lim, "bottles of beer")
            print("Take one down pass it around...")
            print(lim, "bottles of beer on the wall")
            input("\nPRESS ENTER\n")
            lim -= 1
sing()
TypeError: unsupported operand type(s) for -=: 'str' and 'int'

Entonces, cuando cambie lim -= 1 a int(lim) -= 1, dice SyntaxError: illegal expression for augmented assignment

preguntado el 10 de marzo de 12 a las 05:03

Considerar: for bottles in range(lim, 0, -1): .... -

¿Estás en Python 2 o 3? Porque input() y print() La función se usa en Python 3, pero su primera línea de secuencia de comandos dice: #!/usr/bin/env python en lugar de #!/usr/bin/env python3. ¿Podría especificar cuál está intentando ejecutar? -

3 Respuestas

Necesita convertir lim de una cadena a un número entero. Prueba esto:

lim = int(input("What number do you want it to count down from?"))

respondido 10 mar '12, 05:03

Si hace esto, también puede eliminar todas las otras conversiones salpicadas a lo largo sing(). - johnsyweb

Si está usando Python 2.x (no especifica), use raw_input preferiblemente.

lim = int(raw_input("What number do you want it to count down from?"))

Desde allí, puede eliminar todos los cheques para int(lim), ya que lim ya es un número entero.

respondido 10 mar '12, 05:03

La primera línea del código OP dice: #!/usr/bin/env python, pero después print se usa como una función (quién sabe, tal vez sea del __future__). - Rik Poggi

Tu consigues eso TypeError porque lim es una cuerda. Y las cadenas no admiten un -= operador:

>>> s = '10'
>>> s -= 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -=: 'str' and 'int'

Lo que debes hacer es convertir lim a entero, algo como esto:

lim = input('Insert number: ')
lim = int(lim)

No te preocupes print después, también puede imprimir números enteros, no solo cadenas :)


También diría que hay un problema principal con tu primera línea. A juzgar por su código, esto:

#!/usr/bin/env python

debiera ser

#!/usr/bin/env python3

ya que está escribiendo código con sintaxis / moda de Python 3.

También puede deshacerse del global declaración:

#!/usr/bin/env python3
def sing():
    print("This program sings the song 99 bottles of beer on the wall")
    lim = input("What number do you want it to count down from?")
    lim = int(lim)
    while lim > 1:
        print(lim, "bottles of beer on the wall", lim, "bottles of beer")
        print("Take one down pass it around...")
        print(lim, "bottles of beer on the wall")
        input("\nPRESS ENTER\n")
        lim -= 1
sing()

respondido 10 mar '12, 06:03

input() es una sintaxis perfectamente válida en Python 2.x, simplemente no hace lo que raw_input hace. input() evalúa el código en 2.x; en 3.x simplemente lo lee. - Makoto

@Makoto: Sí, pero no en la forma en que lo usa el OP. No habría necesidad de convertir a un número entero después. - Rik Poggi

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.