如何接受用户输入以让用户指定他们想要访问 python 程序的哪个方面

how to take user input to let the user specify which aspect of a python program they want to access

目前正在使用 python-docx 库(版本 0.8.1.1)在 PyCharm(社区版 2021.3.3)上编写一些 python(版本 3.10.4)代码, 允许检查 Word 文档的布局规范。这些规格包括纸张尺寸(是否为 A4)、页面方向(是否为纵向)和页边距(是否为普通页边距)。

代码结构允许用户根据数字输入访问程序的特定部分。输入 1 将访问整个程序(执行所有规格检查),输入 2 将仅访问纸张尺寸程序,输入 3 将仅访问页面方向程序,输入 4 将仅访问页边距程序。这些功能按要求工作。

我的问题是在 python 中是否可以让用户输入数字输入的组合来访问程序组合。这些组合无法预测(在这种情况下可以,但在有很多选择的情况下这似乎是不可能的)。例如输入 2 和 3 将 运行 只有纸张尺寸和页面方向程序。

我尝试使用以下代码来说明这种情况(只显示了一般逻辑),但它似乎只执行与第一个数字关联的代码,而不是所有指定的数字:

x, y, z = input(" Enter number to access a program: ")

if x == '1' or y == '1' or z == '1':
    # if x or y or z == 1 run the complete program

elif x == '2' or y == '2' or z == '2':
    # if x or y or z == 2 run the paper size program

elif x == '3' or y == '3' or z == '3':
    # if x or y or z == 3 run the page orientation program

elif x == '4' or y == '4' or z == '4':
    # if x or y or z == 4 run the page margins program

else:
# print this if a number from 1-4 was not entered
print("Invalid x")

原代码有点长,这里就不加了,大致的逻辑布局如下图。任何形式的帮助将不胜感激。代码有什么问题欢迎追问

x = input(" Enter number to access a program: ")

if x == '1':
    # if x == 1 run the complete program

elif x == '2':
    # if x == 2 run only the paper size program

elif x == '3':
    # if x == 3 run only the page orientation program

elif x == '4':
    # if x == 4 run only the page margins program

else:
# print this if a number from 1-4 was not entered
print("Invalid option") 

输入的是一个字符串,如果你只有single-digit个访问码,你可以很方便的使用in运算符来判断它是否包含某些数字。您可以使用设置操作(如下所示)来检查输入是否包含至少一个有效数字。如果我没理解错的话,逻辑应该是这样的:

input_string = input(" Enter number to access a program: ")

if set(input_string).intersection(set('1234')) == set():
    # print this if a number from 1-4 was not entered
    print("Invalid x")

elif '1' in input_string:
    # run the complete program

else:
    if '2' in input_string:
    # run the paper size program

    if '3' in input_string:
    # run the page orientation program

    if '4' in input_string:
    # run the page margins program

编辑: 如果访问代码可以超过一位,您将需要拆分输入字符串。为了更好地控制执行顺序,您可以使用字典将访问代码映射到子程序的名称(假设这些是 Python 函数)。例如:

def paper_size():
    print("Running paper size program.")

def page_orientation():
    print("Running page orientation program.")

def page_margins():
    print("Running page margins program.")

def print_page():
    print("Printing page.")

prompt = """Enter numbers to access programs, separated by spaces.
1: Run the complete program.
2: Paper size
3: Page orientation
4: Page margins
11: Print page\n\n"""

valid_codes = {1, 2, 3, 4, 11}
subprogram = {2: paper_size,
              3: page_orientation,
              4: page_margins,
              11: print_page}

input_string = input(prompt)
requested = input_string.split()

for i, s in enumerate(requested):
    try:
        requested[i] = int(requested[i])
    except ValueError:
        print(f"Invalid input: {s}")
        break
    try:
        assert requested[i] in valid_codes
    except AssertionError:
        print(f"Invalid code: {s}")
        break

if 1 in requested:
    print("Running complete program.")

else:
    for i in requested:
        subprogram[i]()