답변:
당신이 언급 한 바와 같이, 가장 쉬운 방법은 사용하는 것입니다 raw_input()(또는 단순히 input()위한 파이썬 3 ). 이 작업을 수행하는 기본 방법은 없습니다. 에서 레시피 577058 :
import sys
def query_yes_no(question, default="yes"):
"""Ask a yes/no question via raw_input() and return their answer.
"question" is a string that is presented to the user.
"default" is the presumed answer if the user just hits <Enter>.
It must be "yes" (the default), "no" or None (meaning
an answer is required of the user).
The "answer" return value is True for "yes" or False for "no".
"""
valid = {"yes": True, "y": True, "ye": True,
"no": False, "n": False}
if default is None:
prompt = " [y/n] "
elif default == "yes":
prompt = " [Y/n] "
elif default == "no":
prompt = " [y/N] "
else:
raise ValueError("invalid default answer: '%s'" % default)
while True:
sys.stdout.write(question + prompt)
choice = raw_input().lower()
if default is not None and choice == '':
return valid[default]
elif choice in valid:
return valid[choice]
else:
sys.stdout.write("Please respond with 'yes' or 'no' "
"(or 'y' or 'n').\n")
사용 예 :
>>> query_yes_no("Is cabbage yummier than cauliflower?")
Is cabbage yummier than cauliflower? [Y/n] oops
Please respond with 'yes' or 'no' (or 'y' or 'n').
Is cabbage yummier than cauliflower? [Y/n] [ENTER]
>>> True
>>> query_yes_no("Is cabbage yummier than cauliflower?", None)
Is cabbage yummier than cauliflower? [y/n] [ENTER]
Please respond with 'yes' or 'no' (or 'y' or 'n').
Is cabbage yummier than cauliflower? [y/n] y
>>> True
elif choice in valid:그리고 아마도 부울을 반환 할 것입니다.
raw_input()라고 input()Python3에
raw_input()와 input()Python3합니다.
나는 이렇게 할 것입니다 :
# raw_input returns the empty string for "enter"
yes = {'yes','y', 'ye', ''}
no = {'no','n'}
choice = raw_input().lower()
if choice in yes:
return True
elif choice in no:
return False
else:
sys.stdout.write("Please respond with 'yes' or 'no'")
raw_input()라고 input()Python3에
strtobool파이썬의 표준 라이브러리 에는 다음과 같은 함수 가 있습니다 : http://docs.python.org/2/distutils/apiref.html?highlight=distutils.util#distutils.util.strtobool
이를 사용하여 사용자 입력을 확인하고 값 True또는 False값으로 변환 할 수 있습니다.
f아마 False의 약자 False == 0이므로 논리를 얻습니다. 함수가 int대신 a를 반환하는 이유는 bool나에게 신비입니다.
False또는 0(영) 이 아닌 경우 . bool 함수를 사용하여 평가 된 것은 true가되고 다음을 리턴 1합니다.
if strtobool(string) is False: do_stuff().
단일 선택을 위해이 작업을 수행하는 매우 간단하지만 (정교하지는 않은) 방법은 다음과 같습니다.
msg = 'Shall I?'
shall = input("%s (y/N) " % msg).lower() == 'y'
이 주위에 간단한 (약간 개선 된) 함수를 작성할 수도 있습니다.
def yn_choice(message, default='y'):
choices = 'Y/n' if default.lower() in ('y', 'yes') else 'y/N'
choice = input("%s (%s) " % (message, choices))
values = ('y', 'yes', '') if choices == 'Y/n' else ('y', 'yes')
return choice.strip().lower() in values
참고 : Python 2에서는 raw_input대신을 사용하십시오 input.
result = raw_input("message").lower() in ('y','yes')
click 의 confirm방법을 사용할 수 있습니다 .
import click
if click.confirm('Do you want to continue?', default=True):
print('Do something')
인쇄됩니다 :
$ Do you want to continue? [Y/n]:
Python 2/3Linux, Mac 또는 Windows에서 작동합니다 .
@Alexander Artemenko가 언급했듯이 strtobool을 사용하는 간단한 솔루션이 있습니다.
from distutils.util import strtobool
def user_yes_no_query(question):
sys.stdout.write('%s [y/n]\n' % question)
while True:
try:
return strtobool(raw_input().lower())
except ValueError:
sys.stdout.write('Please respond with \'y\' or \'n\'.\n')
#usage
>>> user_yes_no_query('Do you like cheese?')
Do you like cheese? [y/n]
Only on tuesdays
Please respond with 'y' or 'n'.
ok
Please respond with 'y' or 'n'.
y
>>> True
sys.stdout.write대신에 print?
strtobool()(내 시험에서)하지 않는이가 필요합니다 lower(). 그러나이 설명서에는 명시되어 있지 않습니다.
나는 이것이 여러 가지 방법으로 답변되었으며 OP의 특정 질문 (기준 목록과 함께)에 대답하지 않을 수도 있지만 이것이 가장 일반적인 유스 케이스에 대해 한 일이며 다른 답변보다 훨씬 간단합니다.
answer = input('Please indicate approval: [y/n]')
if not answer or answer[0].lower() != 'y':
print('You did not indicate approval')
exit(1)
prompter를 사용할 수도 있습니다 .
README에서 뻔뻔스럽게 가져온 것 :
#pip install prompter
from prompter import yesno
>>> yesno('Really?')
Really? [Y/n]
True
>>> yesno('Really?')
Really? [Y/n] no
False
>>> yesno('Really?', default='no')
Really? [y/N]
True
python 2/3 호환 더 많은 pythonic으로 fmark의 답변을 수정했습니다.
더 많은 오류 처리에 관심이 있다면 ipython의 유틸리티 모듈을 참조하십시오.
# PY2/3 compatibility
from __future__ import print_function
# You could use the six package for this
try:
input_ = raw_input
except NameError:
input_ = input
def query_yes_no(question, default=True):
"""Ask a yes/no question via standard input and return the answer.
If invalid input is given, the user will be asked until
they acutally give valid input.
Args:
question(str):
A question that is presented to the user.
default(bool|None):
The default value when enter is pressed with no value.
When None, there is no default value and the query
will loop.
Returns:
A bool indicating whether user has entered yes or no.
Side Effects:
Blocks program execution until valid input(y/n) is given.
"""
yes_list = ["yes", "y"]
no_list = ["no", "n"]
default_dict = { # default => prompt default string
None: "[y/n]",
True: "[Y/n]",
False: "[y/N]",
}
default_str = default_dict[default]
prompt_str = "%s %s " % (question, default_str)
while True:
choice = input_(prompt_str).lower()
if not choice and default is not None:
return default
if choice in yes_list:
return True
if choice in no_list:
return False
notification_str = "Please respond with 'y' or 'n'"
print(notification_str)
raw_input()존재하지 않는 python 3.x와 동일하게 수행하십시오 .
def ask(question, default = None):
hasDefault = default is not None
prompt = (question
+ " [" + ["y", "Y"][hasDefault and default] + "/"
+ ["n", "N"][hasDefault and not default] + "] ")
while True:
sys.stdout.write(prompt)
choice = input().strip().lower()
if choice == '':
if default is not None:
return default
else:
if "yes".startswith(choice):
return True
if "no".startswith(choice):
return False
sys.stdout.write("Please respond with 'yes' or 'no' "
"(or 'y' or 'n').\n")
Python 3의 경우이 기능을 사용하고 있습니다.
def user_prompt(question: str) -> bool:
""" Prompt the yes/no-*question* to the user. """
from distutils.util import strtobool
while True:
user_input = input(question + " [y/n]: ").lower()
try:
result = strtobool(user_input)
return result
except ValueError:
print("Please use y/n or yes/no.\n")
strtobool의 함수는 부울로 문자열을 변환합니다. 문자열을 구문 분석 할 수 없으면 ValueError가 발생합니다.
파이썬 3에서 raw_input은 input 으로 이름이 바뀌 었습니다 .
아래 코드와 같은 것을 시도하여 변수 'accepted'표시에서 선택 항목을 사용할 수 있습니다.
print( 'accepted: {}'.format(accepted) )
# accepted: {'yes': ['', 'Yes', 'yes', 'YES', 'y', 'Y'], 'no': ['No', 'no', 'NO', 'n', 'N']}
코드는 다음과 같습니다 ..
#!/usr/bin/python3
def makeChoi(yeh, neh):
accept = {}
# for w in words:
accept['yes'] = [ '', yeh, yeh.lower(), yeh.upper(), yeh.lower()[0], yeh.upper()[0] ]
accept['no'] = [ neh, neh.lower(), neh.upper(), neh.lower()[0], neh.upper()[0] ]
return accept
accepted = makeChoi('Yes', 'No')
def doYeh():
print('Yeh! Let\'s do it.')
def doNeh():
print('Neh! Let\'s not do it.')
choi = None
while not choi:
choi = input( 'Please choose: Y/n? ' )
if choi in accepted['yes']:
choi = True
doYeh()
elif choi in accepted['no']:
choi = True
doNeh()
else:
print('Your choice was "{}". Please use an accepted input value ..'.format(choi))
print( accepted )
choi = None
프로그래밍 멍청한 놈으로, 위의 답변이 지나치게 복잡하다는 것을 알았습니다. 특히 목표가 다양한 예 / 아니오 질문을 전달할 수있는 간단한 기능을 사용하여 사용자가 예 또는 아니오를 선택하도록 강요하는 경우 특히 그렇습니다. 이 페이지와 다른 여러 페이지를 and이 뒤져서 여러 가지 좋은 아이디어를 모두 빌린 후 다음과 같이 결론을 맺었습니다.
def yes_no(question_to_be_answered):
while True:
choice = input(question_to_be_answered).lower()
if choice[:1] == 'y':
return True
elif choice[:1] == 'n':
return False
else:
print("Please respond with 'Yes' or 'No'\n")
#See it in Practice below
musical_taste = yes_no('Do you like Pine Coladas?')
if musical_taste == True:
print('and getting caught in the rain')
elif musical_taste == False:
print('You clearly have no taste in music')
이것이 내가 사용하는 것입니다 :
import sys
# cs = case sensitive
# ys = whatever you want to be "yes" - string or tuple of strings
# prompt('promptString') == 1: # only y
# prompt('promptString',cs = 0) == 1: # y or Y
# prompt('promptString','Yes') == 1: # only Yes
# prompt('promptString',('y','yes')) == 1: # only y or yes
# prompt('promptString',('Y','Yes')) == 1: # only Y or Yes
# prompt('promptString',('y','yes'),0) == 1: # Yes, YES, yes, y, Y etc.
def prompt(ps,ys='y',cs=1):
sys.stdout.write(ps)
ii = raw_input()
if cs == 0:
ii = ii.lower()
if type(ys) == tuple:
for accept in ys:
if cs == 0:
accept = accept.lower()
if ii == accept:
return True
else:
if ii == ys:
return True
return False
def question(question, answers):
acceptable = False
while not acceptable:
print(question + "specify '%s' or '%s'") % answers
answer = raw_input()
if answer.lower() == answers[0].lower() or answers[0].lower():
print('Answer == %s') % answer
acceptable = True
return answer
raining = question("Is it raining today?", ("Y", "N"))
이것이 내가하는 방법입니다.
산출
Is it raining today? Specify 'Y' or 'N'
> Y
answer = 'Y'
여기에 내가 취하는 것이 있습니다. 사용자가 조치를 확인하지 않으면 단순히 중단하고 싶었습니다.
import distutils
if unsafe_case:
print('Proceed with potentially unsafe thing? [y/n]')
while True:
try:
verify = distutils.util.strtobool(raw_input())
if not verify:
raise SystemExit # Abort on user reject
break
except ValueError as err:
print('Please enter \'yes\' or \'no\'')
# Try again
print('Continuing ...')
do_unsafe_thing()
정리 된 Python 3 예제 :
# inputExample.py
def confirm_input(question, default="no"):
"""Ask a yes/no question and return their answer.
"question" is a string that is presented to the user.
"default" is the presumed answer if the user just hits <Enter>.
It must be "yes", "no", or None (meaning
an answer is required of the user).
The "answer" return value is True for "yes" or False for "no".
"""
valid = {"yes": True, "y": True, "ye": True,
"no": False, "n": False}
if default is None:
prompt = " [y/n] "
elif default == "yes":
prompt = " [Y/n] "
elif default == "no":
prompt = " [y/N] "
else:
raise ValueError("invalid default answer: '{}}'".format(default))
while True:
print(question + prompt)
choice = input().lower()
if default is not None and choice == '':
return valid[default]
elif choice in valid:
return valid[choice]
else:
print("Please respond with 'yes' or 'no' "
"(or 'y' or 'n').\n")
def main():
if confirm_input("\nDo you want to continue? "):
print("You said yes because the function equals true. Continuing.")
else:
print("Quitting because the function equals false.")
if __name__ == "__main__":
main()
raw_input()입니다input().