我是python和编程的新手,所以如果它是一个" noob问题"我很抱歉。无论如何,是否有可能在python中选择多项选择,而没有if循环?
愚蠢的例子:
print "Do you want to enter the door"
raw_input ("Yes or not")
用户只能在选择之间进行选择。
答案 0 :(得分:7)
如果您需要定期执行此操作,可以使用方便的库来帮助您轻松获得更好的用户体验:inquirer
免责声明:据我所知,它不会在没有黑客攻击的情况下在Windows上工作。
您可以使用pip安装inquirer:
pip install inquirer
示例1:多项选择
查询者的一个功能是让用户从带有键盘箭头键的列表中进行选择,而不是要求他们写出答案。这样,您就可以为控制台应用程序实现更好的用户体验。
以下是documentation:
的示例import inquirer
questions = [
inquirer.List('size',
message="What size do you need?",
choices=['Jumbo', 'Large', 'Standard', 'Medium', 'Small', 'Micro'],
),
]
answers = inquirer.prompt(questions)
print answers["size"]
示例2:是/否问题:
对于"是/否"像你这样的问题,你甚至可以使用询问者的确认:
import inquirer
confirm = {
inquirer.Confirm('confirmed',
message="Do you want to enter the door ?" ,
default=True),
}
confirmation = inquirer.prompt(confirm)
print confirmation["confirmed"]
其他有用的链接:
答案 1 :(得分:2)
实现您所需要的一种可能方法是使用while
循环。
print "Do you want to enter the door"
response = None
while response not in {"yes", "no"}:
response = raw_input("Please enter yes or no: ")
# Now response is either "yes" or "no"
答案 2 :(得分:2)
对于使用提示工具包2或3的操作系统不可知的解决方案,请使用疑问句
答案 3 :(得分:0)
对于使用 Python 3 的用户,并且希望使用不区分大小写的选项:
def ask_user():
print("Do you want to save?")
response = ''
while response.lower() not in {"yes", "no"}:
response = input("Please enter yes or no: ")
return response.lower() == "yes"
而且,如果我能正确理解赋值表达式(PEP 572),则可以在 Python 3.8 中做到这一点:
def ask_user():
while r:= input("Do you want to save? (Enter yes/no)").lower() not in {"yes", "no"}:
pass
return r.lower() == "yes"
答案 4 :(得分:0)
如果您使用Windows,并且需要使用一个字符立即输入,则此方法应该起作用:
import os
inp = "yn"
if os.system("choice /c:%s /n /m \"Yes or No (Y/N)\"" % inp) - 2:
# if pressed Y
print("Yes")
else:
# if pressed N
print("No")
P。 S .:此代码可在Python 3上运行
答案 5 :(得分:0)
仅选择是或否,这有点大材小用,但这是一种通用解决方案,也适用于两个以上的选项。而且它不受不存在的选项的保护,将迫使用户提供新的有效输入。这没有任何进口。
第一个处理所有功能的函数:
def selectFromDict(options, name):
index = 0
indexValidList = []
print('Select a ' + name + ':')
for optionName in options:
index = index + 1
indexValidList.extend([options[optionName]])
print(str(index) + ') ' + optionName)
inputValid = False
while not inputValid:
inputRaw = input(name + ': ')
inputNo = int(inputRaw) - 1
if inputNo > -1 and inputNo < len(indexValidList):
selected = indexValidList[inputNo]
print('Selected ' + name + ': ' + selected)
inputValid = True
break
else:
print('Please select a valid ' + name + ' number')
return selected
然后是一个包含所有选项的字典
options = {}
# [USER OPTION] = PROGRAM RESULT
options['Yes'] = 'yes'
options['No'] = 'no'
然后使用选项调用函数
# Let user select a month
option = selectFromDict(options, 'option')
结果是:
> Select a option:
> 1) Yes
> 2) No
> option: 3
> Please select a valid option number
> option: 1
> Selected option: yes
如前所述,例如在一年中的所有月份重用上述功能都是可行的
months = {}
months['January'] = 'jan'
months['February'] = 'feb'
months['March'] = 'mar'
months['April'] = 'apr'
months['May'] = 'may'
months['June'] = 'jun'
months['July'] = 'jul'
months['August'] = 'aug'
months['September'] = 'sep'
months['October'] = 'oct'
months['November'] = 'nov'
months['December'] = 'dec'
# Let user select a month
month = selectFromDict(months, 'Month')
示例结果:
> Select a Month:
> 1) January
> 2) February
> 3) March
> 4) April
> 5) May
> 6) June
> 7) July
> 8) August
> 9) September
> 10) October
> 11) November
> 12) December
> Month: 5
> Selected Month: may