K.U*_*K.U 6 python invalid-characters while-loop caesar-cipher
我正在编写一个程序,它将一个字符串作为输入,并检查其中的元素是否有效.我希望我的输入只包含较低的字符和句点,感叹号和空格,而不是空字符串.如果用户输入空字符串或无效字符,则会要求他们再次输入字符串:
我知道如何检查字符串中的字符.我用这种方法
alpha ="abcdefghijklmnopqrstuvwxyz"
message= input("Enter message: ")
for i in message:
if i in alpha:
print i
Run Code Online (Sandbox Code Playgroud)
通常我会使用下面的方法来检查无效输入,但如果我想检查字符串中的字符,它将不适用于这种情况.我只能使用它来检查消息是否为空
textOK = False
while not textOK:
message= input(prompt)
if len(message) == 0:
print("Message is empty)
else:
textOK= True
Run Code Online (Sandbox Code Playgroud)
这将在用户输入空字符串时重新提示.我不知道如何结合这两种方法.简而言之,我想检查我的输入是否只包含较低的字母,句号,感叹号和空格.如果它包含其他特殊字符或数字或者是空字符串,则会提示用户再次输入该消息.请帮忙!!
您可以使用一组允许的字符检查该集合是否是输入字符串的超集:
allowed = set("abcdefghijklmnopqrstuvwxyz! .")
while True:
message = input("Enter message: ")
if message and allowed.issuperset(message):
# do whatever
break
print("Invalid characters entered!")
Run Code Online (Sandbox Code Playgroud)
它只会允许允许的内容:
In [19]: message = "foobar!!$ "
In [20]: message and allowed.issuperset(message)
Out[20]: False
In [21]: message = "foobar!! "
In [22]: message and allowed.issuperset(message)
Out[22]: True
In [23]: message = ""
In [24]: bool( message and allowed.issuperset(message))
Out[24]: False
Run Code Online (Sandbox Code Playgroud)
您还可以使用all()...:
while True:
message = input("Enter message: ")
if message and all(ch in allowed for ch in message):
print("ok")
break
print("Invalid characters entered!)
Run Code Online (Sandbox Code Playgroud)
如果要输出坏字符:
while True:
message = input("Enter message: ")
if message and all(ch in allowed for ch in message):
print("ok")
break
print("The following invalid character(s) were entered! {}"
.format(" ".join(set(message)- allowed)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2795 次 |
| 最近记录: |