TypeError: невозможно распаковать не повторяющийся объект NoneType: не удается найти, где мои данные превратились в "None Type" - PullRequest
0 голосов
/ 05 августа 2020

Я только начал изучать код, а я только начал учить python Я хотел спросить о том, что я практикую в академии Jetbrains

когда я кодирую, как показано ниже, я получаю TypeError: не могу распаковать не повторяемый объект NoneType

Я знаю, что было несколько вопросов об этой TypeError, но я не мог понять комментарии, и я не мог понять, что случилось ... Некоторые из вас, ребята, не возражают взглянуть на это и сказать мне, почему я получаю ошибку ...? И пожалуйста прокомментируйте, когда что-то неловко

# declaring the current status of the coffee machine
def status(water, milk, beans, cups, money):
    print('The Coffee machine has:')
    print(water, 'of water')
    print(milk, 'of milk')
    print(beans, 'of coffee beans')
    print(cups, 'of disposable cups')
    print(money, 'of money')


# espresso
def espresso(water, beans, money):
    water -= 250
    beans -= 16
    money += 4
    return water, beans, money

# latte
def latte(water, milk, beans, money):
    water -= 350
    milk -= 75
    beans -= 20
    money += 7
    return water, milk, beans, money

# cappuccino
def cappuccino(water, milk, beans, money):
    water -= 200
    milk -= 100
    beans -= 12
    money += 6
    return water, milk, beans, money

# buy
def buying(water, milk, beans, money):
    coffee = input('What do you want to buy? 1 - espresso, 2 - latte, 3 - cappuccino: ')
    if coffee == 1:
        water, beans, money = espresso(water,beans, money)
        return water, milk, beans, money
    elif coffee == 2:
        water, milk, beans, money = latte(water, milk, beans, money)
        return water, milk, beans, money
    elif coffee == 3:
        water, milk, beans, money = cappuccino(water, milk, beans, money)
        return water, milk, beans, money

status(water, milk, beans, cups, money)
water, milk, beans, money = buying(water, milk, beans, money)
status(water, milk, beans, cups, money)

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Вам необходимо преобразовать вводимые пользователем данные в int.

coffee = int (input ('Что вы хотите купить? 1 - эспрессо, 2 - латте, 3 - капучино:'))

0 голосов
/ 05 августа 2020

Функция input() возвращает строку, пока вы проверяете целое число.

Сделайте это -

# buy
def buying(water, milk, beans, money):
    coffee = input('What do you want to buy? 1 - espresso, 2 - latte, 3 - cappuccino: ')
    # Convert string to integer
    # keep in mind it will throw ValueError if input was not an integer
    coffee = int(coffee)

Вы также можете просто изменить оператор if на

# Notice the quotes
if coffee == '1':

Также было бы неплохо вернуться в конце функции. Таким образом, вы не получите TypeError даже при неправильном вводе (скажем, когда пользователь вводит 4)

def buying(water, milk, beans, money):
    coffee = input('What do you want to buy? 1 - espresso, 2 - latte, 3 - cappuccino: ')
    
    if coffee == '1':
        water, beans, money = espresso(water,beans, money)
    elif coffee == '2':
        water, milk, beans, money = latte(water, milk, beans, money)
    elif coffee == '3':
        water, milk, beans, money = cappuccino(water, milk, beans, money)

    return water, milk, beans, money
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...