Программа не будет зацикливаться или добавлять в список - PullRequest
0 голосов
/ 03 ноября 2019

Я сделал (или больше, я пытаюсь сделать) программу, чтобы помочь мне рассчитать некоторые цифры. У меня есть несколько уровней, каждый из которых дает вознаграждение, и для выдачи вознаграждений я предпочитаю не вставлять каждую сумму и складывать их все для получения итогов.

Я сделал это так, чтобы я записал номер уровня, он добавляет сумму к списку, он снова зацикливается, я вставляю другое число и т. д.

Но он не зацикливается или добавляет числа в список.

Вот мой супер некомпактный код:

lists = []
total = 0
def moneyz():
    level=input('-> ')
    print('g') #just a testing bookmark
    print(level) #same here
    if level==1:
        print('oo') #and here
        lists.apped('150')
        total==total+150

    elif level == 2:
        lists.apped('225')
        total==total+225
        moneyz()

    elif level == 3:
        lists.apped('330')
        total==total+330
        moneyz()

    elif level == 4:
        lists.apped('500')
        total==total+500
        moneyz()

    elif level == 5:
        lists.apped('1000')
        total==total+1000
        moneyz()

    elif level == 6:
        lists.apped('1500')
        total==total+1500
        moneyz()

    elif level == 7:
        lists.apped('2250')
        total==total+2250
        moneyz()

    elif level == 8:
        lists.apped('3400')
        total==total+3400
        moneyz()

    elif level == 9:
        lists.apped('5000')
        total==total+5000
        moneyz()

    elif level == 10:
        lists.apped('15000')
        total==total+15000
        moneyz()


moneyz()
print(lists)
print(total)

Ответы [ 2 ]

1 голос
/ 03 ноября 2019

Я вижу три ошибки в этом коде:

  1. level - это str, поэтому оно никогда не будет равно int. Ни одна из ваших if проверок никогда не будет выполнена, поэтому ваша функция не рекурсивна. Чтобы определить это при отладке, можно добавить print(repr(level)) после получения ввода;вы увидите, что это значение типа '1' (строка) вместо 1 (целое число).
  2. Не существует такой вещи, как apped(), поэтому, как только вы нажмете эту строку кода(что в настоящее время не происходит, потому что ваши if чеки никогда не совпадают), это повысит AttributeError.
  3. Ваш total никогда не увеличится, потому что вы используете ==(проверка на равенство) вместо оператора = (присваивание).

Вот гораздо более короткая (рабочая) версия программы, использующая простую таблицу поиска вместо набора if заявления:

# Rewards for levels 0 to 10.
rewards = [0, 150, 225, 330, 500, 1000, 1500, 2250, 3400, 5000, 15000]

# Running totals.
lists = []
total = 0

while True:
    # Get reward level from the user.  If not a valid reward level, stop.
    level = input('-> ')
    try:
        level_num = int(level)
    except ValueError:
        break
    if level_num not in range(len(rewards)):
        break

    # Add the reward to the lists and the total.
    reward = rewards[level_num]
    lists.append(reward)
    total += reward

# Final output.
print(lists)
print(total)
0 голосов
/ 03 ноября 2019

Вы используете level==1, где уровень является строкой, так как input() возвращает строку, и вы сравниваете ее с int.

Вам следует попробовать level=='1' или преобразовать уровень в int с помощью level = int(input("->")).

Кроме того, список имеет метод append(), а не apped()

Кроме того, total==total+1000 не поможет при добавлении. Он просто проверит, равняется ли значение total сумме плюс 1000. Вы должны использовать total = total + 1000 для добавления значения.

Вот один пример, модифицированный, если блок:

if level=='1':
        print('oo') #and here
        lists.append('150')
        total=total+150

Надеюсь, этопомогает.

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