我正在编写一个将用户输入打印为字母图案的函数。示例:如果用户输入为A,则输出应为A,由星号(*)制成
这是我的代码
def letter_a():
for hz_line in range(4):
for vert_line in range(4):
if ((vert_line == 0 or vert_line == 3) and hz_line != 0) or ((hz_line == 0 or hz_line == 2)
and (0 < vert_line < 3)):
print("x", end="")
else:
print(end=" ")
print()
def letter_n():
for hz_line in range(4):
for vert_line in range(5):
if (vert_line == 0 or vert_line == 4) or (vert_line == hz_line):
print("x", end="")
else:
print(end=" ")
print()
def letter_u():
for hz_line in range(4):
for vert_line in range(4):
if ((vert_line == 0 or vert_line == 3) and hz_line != 3) or (hz_line == 3
and (vert_line == 1 or vert_line == 2)):
print("x", end="")
else:
print(end = " ")
print()
userinput = input()
inputlen = int(len(userinput))
print(inputlen)
for char in range(inputlen):
print("letter_%s()" % userinput[char], end=" ")
如您所见,输出显示的是函数的名称,而不是函数的名称。如何才能做到这一点?
做您正在做的事情不是实现此目的的最佳方法。就像@jakub提到的那样,最好使用字典。
您甚至可以执行以下操作:
LETTERS = {
"A": [
" xx ",
"x x",
"xxxx",
"x x"
],
"N": [
"x x",
"xx x",
"x x x",
"x xx"
]
}
def print_letter(letter):
for line in letter:
print(line)
userinput = input()
for char in userinput:
if char.upper() in LETTERS:
letter = LETTERS[char.upper()]
print_letter(letter)
尝试根据它们的名称来调用方法有些不明智,除非您确实需要,否则我不建议您这样做。您必须确保收到的输入正确。如果输入的是a(0-+-==
。检查字典以查看您是否支持该字符会更容易(我在这if char.upper() in LETTERS
行中做了)。
如果确实需要,可以执行以下操作:
userinput = input()
for char in userinput:
# access the method
letter_method = locals()["letter_" + char]
#call the method
letter_method()
locals()
(和globals()
)返回字典,然后您可以根据范围来使用它们来访问变量。(请参阅https://docs.python.org/3/library/functions.html#locals)。这是相当的元编程,在此阶段我不会开始使用它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句