HighLine是一个用于简化控制台输入和输出的Ruby库。它提供了允许您请求输入并验证它的方法。有没有提供与Python类似的功能的东西?
要显示HighLine的功能,请参阅以下示例:
require 'highline/import'
input = ask("Yes or no? ") do |q|
q.responses[:not_valid] = "Answer y or n for yes or no"
q.default = 'y'
q.validate = /\A[yn]\Z/i
end
它询问“是或否?”并让用户输入内容。只要用户没有输入y或n(不区分大小写),就会打印“回答y或n表示是或否”并让用户再次输入答案。此外,如果用户按Enter键,则默认为y。最后,完成后,输入存储在input
中。这是一个示例结果,用户首先输入“EH ???”然后是“y”:
Yes or no? |y| EH??? Answer y or n for yes or no ? y
在Python中有同样简单的方法吗?
答案 0 :(得分:3)
以下应同样适用于你,虽然它与Ruby中的问题风格不完全相同。
class ValidInput(object):
def __init__(self,prompt,default="",regex_validate="",
invalid_response="",correct_response=""):
self.prompt=prompt
self.default=default
self.regex_validate=regex_validate
self.invalid_response=invalid_response
self.correct_response=correct_response
def ask(self):
fin=""
while True:
v_in=raw_input(self.prompt)
if re.match(v_in,self.regex_validate):
fin=v_in
print self.correct_response
break
else:
print self.invalid_response
if self.default=="break":
break
continue
return fin
你会像以下一样使用它:
my_input=ValidInput("My prompt (Y/N): ",regex_validate="your regex matching string here",
invalid_response="The response to be printed when it does not match the regex",
correct_response="The response to be printed when it is matched to the regex.")
my_input.ask()
答案 1 :(得分:3)
您可以使用Python 3模块cliask。该模块的灵感来自the answer of IT Ninja,修复了some deficiencies in it并允许通过正则表达式,谓词,元组或列表进行验证。
获取该模块的最简单方法是通过pip安装该模块(有关其他安装方式,请参阅readme):
sudo pip install cliask
然后您可以通过导入来使用该模块,如下例所示:
import cliask
yn = cliask.agree('Yes or no? ',
default='y')
animal = cliask.ask('Cow or cat? ',
validator=('cow', 'cat'),
invalid_response='You must say cow or cat')
print(yn)
print(animal)
以下是运行示例时会话的外观:
Yes or no? |y| EH??? Please enter "yes" or "no" Yes or no? |y| y Cow or cat? rabbit You must say cow or cat Cow or cat? cat True cat