Перебор пустого списка - PullRequest
       1

Перебор пустого списка

0 голосов
/ 15 октября 2019

Попытка перебрать список, который на основе предыдущих условий может быть или не быть пустым.

Вот код:

function_name(): 
    for x in gen:
        if x = attacker1:
            gain += 2
        elif x = attacker2:
            gain += 3
        else:
            gain -= 1
    if not gen:
        gain -= 1
    return gain

Когда одна из переменных присутствует всписок, код работает. Когда переменные отсутствуют, коды не работают, и я получаю следующее сообщение об ошибке:

ErrorMessage: локальная переменная 'усиление', на которое ссылается перед присваиванием

также попытался:

function_name():      
      for x in gen:
          if x = attacker_1:
              gain += 2
          elif x = attacker2:
              gain += 3
          else:
              gain -= 1
      if gen == False:
          gain -= 1
      return gain

Приведенный выше код выдает мне то же сообщение об ошибке.

Кроме того, я не уверен, что мне нужен оператор "else" в цикле for, но я вставил тудабыть в безопасности.

Любая помощь очень ценится. Спасибо!

Ответы [ 3 ]

5 голосов
/ 15 октября 2019

усиление нигде не объявлено, поэтому вы не можете сделать

gain += 2

Поскольку вы не можете добавить 2 к чему-то, что еще не существует.

Итак, вы должны написать

gain = 0

в начале вашей функции.

Сообщение об ошибке было довольно информативным.

1 голос
/ 15 октября 2019

Это сообщение об ошибке в основном говорит о том, что вам нужно объявить и инициализировать 'усиление' перед его использованием. К тому времени, когда вы пытаетесь вернуть его, он выходит за рамки.

Попробуйте поставить

gain = 0

в начале функции.

0 голосов
/ 15 октября 2019

У вас есть пара проблем с вашим кодом, но одна из них, с которой вы сейчас столкнулись, заключается в том, что gain никогда не объявляется до того, как на него ссылаются. Python с удовольствием разрешит вам добавить существующую переменную, но если gain еще не существует, как мы узнаем, каково ее значение? (Мы могли бы интуитивно думать, что это 0, но поскольку python не уверен, он говорит вам, что вы ссылаетесь на переменную перед присваиванием.)

Кроме того, вы захотите следить - ваш if операторы используют присваивание =, а не сравнение ==.

Вот рабочая версия вашего кода.

def function_name(gen): 
  attacker1 = 0
  attacker2 = 1
  gain = 0
  for x in gen:
    if x == attacker1:
      gain += 2
    elif x == attacker2:
      gain += 3
    else:
      gain -= 1
  if not gen:
    gain -= 1
  return gain

print(function_name([0, 1, 2]))

Демо

...