python-3.x len(sys.argv)的值引发问题

p3rjfoxz  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(157)

因此,我尝试使用sys.argv的值来获取input要打印的字体。但是无论我在终端中键入多少个值,sys.argv的值都保持为1
第一个if工作得很好,但是代码永远不会到达elif部分,即使我输入filename.py value1 value2
下面是我的代码:

import pyfiglet
import sys
import random

from pyfiglet import Figlet
figlet = Figlet()

#for fonts
fonts_chosen = figlet.getFonts()
font_ = (random.choice(["3-d", "3x5", "5lineoblique", "acrobatic"]))

if len(sys.argv) == 1 :
    str = input("Input: ")
    figlet.setFont(font=font_)
    print(figlet.renderText(str))
elif len(sys.argv) == 3 :
    if sys.argv[1] == "-f" or sys.argv[1] == "--font":
        if sys.argv[2] == fonts_chosen:
            str = input("Input: ")
            figlet.setFont(font=sys.argv[2])
            print(figlet.renderText(str))
        else:
            sys.exit("Invalid usage")
    else:
        sys.exit("Invalid usage")
else:
    sys.exit("Invalid usage")
gr8qqesn

gr8qqesn1#

你的代码有逻辑缺陷。在if sys.argv[2] == fonts_chosen中,您将输入参数与在fonts_chosen = figlet.getFonts()中声明的整个列表进行比较(考虑到您没有在参数中提供该大列表)。我们可以用if sys.argv[2] in fonts_chosen更新它,这样我们的参数将被检查是否属于该字体列表。
下面是更新后的代码,您不需要两个参数,因为一个就足够了。此外,在随机选择时,您可以提供fonts_chosen列表,以从列表中随机选择字体,而不是您提供的4个字体。

import pyfiglet
import sys
import random

from pyfiglet import Figlet
figlet = Figlet()

#for fonts
fonts_chosen = figlet.getFonts()
font_ = (random.choice(["3-d", "3x5", "5lineoblique", "acrobatic"]))

if len(sys.argv) == 1 :
    str = input("Input: ")
    figlet.setFont(font=font_)
    print(figlet.renderText(str))
elif len(sys.argv) == 2 :
    if sys.argv[1] in fonts_chosen:
        str = input("Input: ")
        figlet.setFont(font=sys.argv[1])
        print(figlet.renderText(str))
    else:
        sys.exit("Invalid font, please provide a valid font name")
else:
    sys.exit("Invalid usage, provide a single argument i.e. font name or you can run it without an argument")

相关问题