Я пытаюсь сделать текст figlet в своем терминале на python в соответствии с одной из практических задач на 6-й неделе CS50. Я пытаюсь выбрать шрифт случайным образом из списка шрифтов pyfiglet, и я пытаюсь реализовать это следующим образом:
import random
from pyfiglet import Figlet
figlet = Figlet()
figfonts = figlet.getFonts()
# ...
random.seed()
figlet.setFont(random.choice(figfonts)) # error here
Однако, когда я запускаю это в своем терминале, я получаю следующую ошибку:
TypeError: Figlet.setFont() takes 1 positional argument but 2 were given
Я в замешательстве. Я привожу только figlet.setFont()
1 аргумент, почему написано, что их два? Я просто не могу собрать воедино то, что сообщение об ошибке пытается сказать мне неправильно.
Метод setFont
имеет сигнатуру:
def setFont(self, **kwargs)
Таким образом, передача font
в качестве аргумента ключевого слова (вместо позиционного аргумента, как вы пытались) должна решить проблему (как предложил @jasonharper в комментариях).
Например:
figlet.setFont(font=random.choice(figfonts))
Я в замешательстве. Я привожу только
figlet.setFont()
1 аргумент, почему написано, что их два?
Как видно из подписи выше, первый позиционный аргумент — self
. Python автоматически передает экземпляр (в данном случае figlet
) в качестве первого аргумента, потому что setFont
«привязан» к экземпляру figlet
при вызове как figlet.setFont()
. Также возможно (но нетрадиционно) вызывать методы экземпляра следующим образом: Figlet.setFont(figlet)
Я попробовал это, но получил другую ошибку: TypeError: Random.choice() got an unexpected keyword argument 'font'
.
@Mailbox, пожалуйста, опубликуйте строку кода, которая вызывает ошибку.
Прошу прощения. В исходном коде, который я разместил, я заменил figlet.setFont(random.choice(figfonts))
на figlet.setFont(font=random.choice(figfonts))
.
Он отлично работает для меня. Вы уверены, что не делаете этого? figlet.setFont(random.choice(font=figfonts))
Лмао, это именно та ошибка, которую я совершил. Я исправил это, и теперь это работает, спасибо! Как вы предсказали эту ошибку?
Каждый пример метода
.setFont()
, который я могу найти в Интернете, показывает, что шрифт определяется параметром ключевого словаfont=
, а не позиционным параметром.