我正在用python编写一个程序,它非常简单我只想知道如果它只包含m,u或i,那么如何使用户输入为true,但绝对没有别的。我的代码运行,但如果输入是“miud”,它将返回true,因为m i和u在其中。下面的代码是我到目前为止的代码,如何更改它以使其仅允许字母m u和i?
x=input("Enter your string")
if 'm' in x and 'i' in x and 'u' in x:
print("true")
else:
print("false")
答案 0 :(得分: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的所有元素都为true(或者iterable为空),则返回True。相当于:
def all(iterable): for element in iterable: if not element: return False return True
all
遍历新创建的迭代器,一旦获得False
就返回False
,如果只获得True
值,则返回True
。
迭代器的优点在于,不会计算True
/ False
列表:测试是在运行中完成的,all
一旦找到不是char就会停止无论是我,还是你。这里不相关,但这可能会对某些应用程序产生性能影响。
答案 1 :(得分:3)
你可以使用一套,
if set(x).issubset({'m', 'u', 'i'}):
print("true")
else:
print("false")
此代码使用sets和issubset
方法。由于字符串是可迭代的,因此它可以用作set()
的参数。该集将包含唯一项(在这种情况下,输入字符串中的每个唯一字符)。
可以使用issubset
方法针对已知有效字符(也在集合中)测试该值。
{'m', 'u', 'i'}
是创建集合的一种方式,但这也可以:
if set(x).issubset(set('mui')):