如何接受用户输入以让用户指定他们想要访问 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]()
目前正在使用 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]()