英文:
figlet.setFont() and random.choice() conflicting with each other
问题
我在尝试在我的终端中用Python制作figlet文本,这是CS50第6周练习问题之一。我试图从pyfiglet的字体列表中随机选择一个字体,并尝试以以下方式实现:
```python
import random
from pyfiglet import Figlet
figlet = Figlet()
figfonts = figlet.getFonts()
# ...
random.seed()
figlet.setFont(random.choice(figfonts)) # 这里出错
然而,当我在我的终端中运行时,我得到以下错误:
TypeError: Figlet.setFont()接受1个位置参数,但给出了2个
我感到困惑。我只给了figlet.setFont()
一个参数,为什么它会说有两个?我无法理解错误消息试图告诉我什么是错误的。
<details>
<summary>英文:</summary>
I'm trying to make figlet text in my terminal in python, as per one of the practice problems in week 6 of CS50. I'm trying to have a font picked randomly from pyfiglet's list of fonts, and I'm trying to implement this as follows:
import random
from pyfiglet import Figlet
figlet = Figlet()
figfonts = figlet.getFonts()
...
random.seed()
figlet.setFont(random.choice(figfonts)) # error here
However, when I run this in my terminal, I get the following error:
`TypeError: Figlet.setFont() takes 1 positional argument but 2 were given`
I'm confused. I'm only providing `figlet.setFont()` 1 argument, why is it saying that there are two? I just can't piece together what the error message is trying to tell me is wrong.
</details>
# 答案1
**得分**: 2
The method `setFont` [has the signature](https://github.com/pwaller/pyfiglet/blob/d78b6ab6e05bf39370a134f6847b79e28a937b2e/pyfiglet/__init__.py#L847):
```python
def setFont(self, **kwargs)
So passing font
as a keyword argument (vs. a positional argument like you tried to) should fix the issue (as suggested by @jasonharper in the comments).
For example:
figlet.setFont(font=random.choice(figfonts))
> I'm confused. I'm only providing figlet.setFont()
1 argument, why is it saying that there are two?
As you can see from the signature above, the first positional argument is self
. Python automatically passes the instance (in this case figlet
) as the first argument because setFont
is "bound" to the instance figlet
when called as figlet.setFont()
. It's also possible (but unconventional) to call instance methods like so: Figlet.setFont(figlet)
英文:
The method setFont
has the signature:
def setFont(self, **kwargs)
So passing font
as a keyword argument (vs. a positional argument like you tried to) should fix the issue (as suggested by @jasonharper in the comments).
For example:
figlet.setFont(font=random.choice(figfonts))
> I'm confused. I'm only providing figlet.setFont()
1 argument, why is it saying that there are two?
As you can see from the signature above, the first positional argument is self
. Python automatically passes the instance (in this case figlet
) as the first argument because setFont
is "bound" to the instance figlet
when called as figlet.setFont()
. It's also possible (but unconventional) to call instance methods like so: Figlet.setFont(figlet)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论