Billjk
Billjk

Reputation: 10686

Integer Errors in Python

So I made a very simple program that counts down from 99 (sings 99 bottles of beer) but I keep getting 1 of 2 errors

#!/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'

Then, when I change lim -= 1 to int(lim) -= 1, it says SyntaxError: illegal expression for augmented assignment

Upvotes: 2

Views: 333

Answers (3)

Rik Poggi
Rik Poggi

Reputation: 29302

You get that TypeError because lim is a string. And strings do not support a -= operator:

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

What you need to do is to convert lim to integer, something like this:

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

Don't worry about print after, it can print integers too, not just strings :)


I'd also say that there's a main problem with your first line. Judging from your code, this:

#!/usr/bin/env python

should be

#!/usr/bin/env python3

since you're writing code with Python 3 syntax/fashion.

You could also get rid of the global statement:

#!/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()

Upvotes: 3

Makoto
Makoto

Reputation: 106440

If you're using Python 2.x (you don't specify), use raw_input instead.

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

From there, you can remove all the checks to int(lim), as lim is already an integer.

Upvotes: 4

PearsonArtPhoto
PearsonArtPhoto

Reputation: 39698

You need to covert lim from a string to an integer. Try this:

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

Upvotes: 6

Related Questions