Целочисленные ошибки в Python - PullRequest
2 голосов
/ 10 марта 2012

Итак, я сделал очень простую программу, которая отсчитывает от 99 (поет 99 бутылок пива), но я получаю 1 из 2 ошибок

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

Затем, когда я изменяю lim -= 1 на int(lim) -= 1, он говорит: SyntaxError: illegal expression for augmented assignment

Ответы [ 3 ]

6 голосов
/ 10 марта 2012

Вам необходимо преобразовать lim из строки в целое число.Попробуйте это:

lim = int(input("What number do you want it to count down from?"))
4 голосов
/ 10 марта 2012

Если вы используете Python 2.x (вы не указываете), используйте raw_input.

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

Оттуда вы можете удалить все проверки до int(lim), так какlim уже является целым числом.

3 голосов
/ 10 марта 2012

Вы получаете это TypeError, потому что lim является строкой. И строки не поддерживают оператор -=:

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

Что вам нужно сделать, это преобразовать lim в целое число, примерно так:

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

Не беспокойтесь о print после, он может также печатать целые числа, а не только строки:)


Я бы также сказал, что есть основная проблема с вашей первой строкой. Судя по вашему коду, это:

#!/usr/bin/env python

должно быть

#!/usr/bin/env python3

, так как вы пишете код с синтаксисом / мода Python 3.

Вы также можете избавиться от оператора global:

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