使用可变数量的命令行参数时出现索引和其他错误

问题描述 投票:0回答:2

我正在学习 CS50 的 Python 编程简介。对于当前的问题,我应该编写一个程序,其中涉及:

  • 需要零个或两个命令行参数:
    • 如果用户想以随机字体输出文本,则为零。
    • 如果用户想要以特定字体输出文本,则两个,在这种情况下,两个中的第一个应该是
      -f
      --font
      ,并且 两者中的第二个应该是字体的名称。
  • 提示用户输入一段文本。
  • 以所需字体输出该文本。
  • 如果用户提供两个命令行参数,并且第一个不是
    -f
    --font
    或者第二个不是字体名称,则程序 应通过
    sys.exit
    退出并显示错误消息。

我到目前为止尝试过的代码包含在下面。问题包括:

  • 当我在命令行中不输入任何参数时,我得到
    IndexError: list index out of range
  • 当我输入 2 个参数且第一个参数不是
    -f
    --f
    时,
    sys.exit
    未按预期执行。
import sys
import random

fonts = ['fontA', 'fontB']

def main():
    s = input("Text: ")
    if len(sys.argv) == 0:
         print(print_random(s))
    elif len(sys.argv) == 2 and (sys.argv[1] == "-f" or sys.argv[1] == "--font") and sys.argv[2] in fonts:
        print(print_argument(s))
    else: 
        sys.exit()

def set_font(font):
    pass  # dummy implementation

def print_random(s):
    set_font(font=random.choice(fonts))
    # render_text(s)        
    
def print_argument(s):
    set_font(font=sys.argv[2])
    # render_text(s)

main()
python indexing argv
2个回答
0
投票

len(sys.argv) 应该 == 3。

如果您输入

print(str(sys.argv))

之前

if len(sys.argv) == 0:

你就会明白


0
投票

我的尝试:

import sys
from pyfiglet import Figlet
import random

figlet = Figlet()
#list of fonts
fonts = figlet.getFonts()
valid_fonts = ["-f", "--f"]

if len(sys.argv) == 1:
    figlet.setFont(font = random.choice(fonts))
elif len(sys.argv) == 3 and (sys.argv[1] in valid_fonts) and sys.argv[2] in fonts:
    figlet.setFont(font = sys.argv[2])
else:
    sys.exit("INVALID USAGE")

text = input("Input: ")
print("Output: ", figlet.renderText(text))
© www.soinside.com 2019 - 2024. All rights reserved.