Вам необходимо отправить количество монстров на функцию, которая использует его:
def welcome():
number = monsters()
print('Alright, ' + str(number) + ' monsters.')
print('So, what are the names of these beasties?')
# send number of monsters to 'monsterNames'
mNames = monsterNames(number)
И:
# accept number rof monsters as an argument from 'welcome'
def monsterNames(number):
totalMobs = [input('Monster name ')] * number
return totalMobs
Вы также должны бросить number
на целое число, как указано @BhargavRao:
def monsters():
number = input('How many monsters will you face? ')
return int(number) # this can fail, use try-catch optimally
Обратите внимание, что я также изменил (после комментариев упоминали):
[[input('Monster name ')]] * number # creates nested lists (mutable)
To:
[input('Monster name ')] * number # creates list of strings (immutable)
Создание списка изменяемых объектов списка умножения (с помощью оператора звезда) является плохой идеей. Потому что вы фактически используете один и тот же объект во всем списке. Если объект изменен - изменение объекта отражается во всем списке.
Это деликатный момент для новичка, которого я подозреваю, прочитал here для более подробного объяснения. Это работает только потому, что это строки, которые неизменяемы и не могут быть легко изменены.
Теперь, когда это не важно, важно отметить, что то, что вы делаете, дублирует одно и то же имя по всему списку. Что вам хочу, чтобы сделать, это создать новое имя для каждого монстра - так что вы должны использовать понимание списка, которое требует ввода несколько раз. Новый и улучшенный monsterNames
функция выглядит следующим образом:
# accept number rof monsters as an argument from 'welcome'
def monsterNames(number):
totalMobs = [input('Monster name ') for _ in range(number)]
return totalMobs
Это создаст список имен монстров, вызвав input
заданное число раз.
Кроме того, выбор _
в качестве имени переменной означает, что он фактически не используется нигде.
Я бы рекомендовал сохранить количество монстров ('number') в памяти программ (например, глобальную переменную, доступную любой функцией в скрипте после ее определения), так что вам не нужно запрашивать входные данные каждый время, которое вы вызываете 'monsters()'. –