7

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

「Yes or No?」と尋ね、ユーザーに何かを入力させます。ユーザーが y または n (大文字と小文字を区別しない) を入力しない限り、"Answer y or n for yes or no" が出力され、ユーザーが回答を再度入力できるようになります。また、ユーザーが Enter キーを押すと、デフォルトで y になります。最後に、入力が完了すると、入力が に格納されinputます。ユーザーが最初に「EH???」と入力した場合の結果の例を次に示します。そして「y」:

はい、もしくは、いいえ?|y| え???
はいまたはいいえで y または n と答えてください
? y

Pythonで同じことを行う同様に簡単な方法はありますか?

4

2 に答える 2

3

Python3モジュールcliaskを使用できます。このモジュールは、IT Ninjaの回答に触発され、その中のいくつかの欠陥を修正し、正規表現、述語、タプル、またはリストを介した検証を可能にします。

モジュールを入手する最も簡単な方法は、 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)

そして、例を実行したときにセッションがどのように見えるかを次に示します。

はい、もしくは、いいえ?| y | EH ???
「はい」または「いいえ」を入力してください
はい、もしくは、いいえ?| y | y
牛か猫か?ウサギ
あなたは牛か猫を言わなければなりません
牛か猫か?猫
真
猫
于 2013-02-20T10:08:47.970 に答える
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()
于 2013-02-19T17:40:14.283 に答える