2016-04-18 65 views
0

我正在用python寫一個程序,它非常簡單我只想知道如何讓用戶輸入爲真,如果它只包含m,u或i,但絕對沒有別的。我的代碼運行,但如果輸入是'miud',它將返回true,因爲我和你在裏面。下面的代碼是我到目前爲止,我如何改變它使它只允許我和我的字母?輸入問題Python

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

回答

3

您可以使用一組,

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

這段代碼利用了setsissubset方法。由於字符串是可迭代的,所以它可以用作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) 

返回真,如果迭代的所有元素都是真(或者,如果可迭代爲空)。等效於:

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

all迭代新創建的迭代器,一旦它得到False,或True如果它只有True值返回False

迭代器的好處是,沒有True/False列表曾經計算:測試是在飛行中完成,all爲一個char發現不是m的都不是,我,或u就停止。這裏沒有關係,但這可能會在某些應用程序中產生性能影響。

+0

這肯定有效,但請你給我什麼印刷後的代碼做解釋。對我來說,它看起來好像只是在字符串中尋找我和你,如果沒有,那麼它會填滿,但例如,這個詞有什麼用? –

+0

我編輯了我的答案來回答這個問題。我將其留作教學目的,但我更喜歡[sberry的解決方案](http://stackoverflow.com/a/36696276/4653485)。 –