답변:
당신이 언급 한 바와 같이, 가장 쉬운 방법은 사용하는 것입니다 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/3
Linux, 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()
.