2016-04-18 17 views
0

私はPythonでプログラムを書いています。それは非常に簡単です。m、u、またはiしか含まれていない場合は、ユーザーからの入力を真にする方法を知りたいだけです。私のコードが実行されますが、入力が 'miud'の場合、m iとuがその中にあるため、trueを返します。以下のコードは私がこれまで持っていたものですが、どのようにしてmとiの文字だけを許可するように変更できますか?入力問題Python

x=input("Enter your string") 
if 'm' in x and 'i' in x and 'u' in x: 
    print("true") 
else: 
    print("false") 

答えて

3

あなたは、このコードはsetsの使用とissubset方法を作る

if set(x).issubset({'m', 'u', 'i'}): 
    print("true") 
else: 
    print("false") 

、そのためにセットを使用することができます。文字列は反復可能なので、set()の引数として使用できます。セットにはユニークな項目が含まれます(この場合、入力文字列の各ユニーク文字)。

この値は、issubsetメソッドを使用して、既知の有効な文字(セット内でも可)に対してテストできます。

{'m', 'u', 'i'}は、セットを作成するための一つの方法であるが、これはあまりにも動作します:間違いなく動作することを

if set(x).issubset(set('mui')): 
3

allを使用してください。

string = input("Enter your string") 
print(all(char in ['m', 'i', 'u'] for char in string)) 

基本的には、

(char in ['m', 'i', 'u'] for char in string) 

はブール値を生成する反復可能オブジェクトを構築します。このイテレーターは、文字列内の各文字(最初から始まる)に対して、charがm、iまたはuの場合はTrue、それ以外の場合はFalseとなります。

は、その後、あなたはall()を養うこのイテレータ:

all(iterable) 

戻り真のiterableの全ての要素に該当する場合(または反復可能が空の場合)。相当:

def all(iterable): 
    for element in iterable: 
     if not element: 
      return False 
    return True 

all新しく作成されたイテレータを反復処理し、すぐにそれが唯一のTrueの値を取得する場合、それはFalse、またはTrueにつれてFalseを返します。テストはその場で行われ、allがcharではないどちらメートルの、I、またはuであることがわかるとすぐに停止します

イテレータの美しさにはTrue/Falseリストは、これまでに計算されていないということです。ここでは関係ありませんが、一部のアプリケーションでパフォーマンスに影響を与える可能性があります。

+0

をしかし、あなたは正確に印刷後のコードが何をするのか私に説明してください可能性があります。私のためには、それは文字列でm iとuだけを探しているように見えます。そうでなければ、それはうまくいっていますが、例えば、すべての単語は何ですか? –

+0

私はこれに答えるために私の答えを編集しました。私は教育目的のためにそれを残しているが、私は[sberryのソリューション](http://stackoverflow.com/a/36696276/4653485)を好む。 –

関連する問題