[英]While Loops (And, Not, Or)
我需要这个简单问题的帮助。 我开始学习更多有关while循环的信息,但不确定自己在做什么错。
有3个条件:
1)字符串必须以“ b”或“ B”开头
2)字符串必须包含6个字符
3)字符串的最后一个字母必须为“ z”或“ Z”
如果不满足任何条件,它将打印“错误”并再次提示用户。 它将显示“ Nice!” 如果符合条件。
这是我的代码:
string = input("Enter a string: ")
length = len(string)
while (not(string[0] == "b" or string[0] == "B" or string[length-1] == "z" or string[length-1] == "Z" and length < 6)):
print("Error!")
string = input("Enter a string: ")
print("Nice! ")
如果输入“ 1000”,则输出将为“ Error!”。 如果我输入“ bz”,则输出将为“ Nice!”。 当长度小于6时,它将打印错误消息。
您可以像使用str.startswith
和str.endswith
来测试边界字符一样简单:
s = input("Enter a string: ")
while True:
if len(s) == 6 and s.startswith(('b', 'B')) and s.endswith(('z', 'Z')):
print('Nice')
break
else:
print('Error, try again!')
s = input("Enter a string: ")
首先检查长度,以使一旦len
表达式( O( 1 )操作)失败,条件短路。
改变这个
string = input("Enter a string: ")
length = len(string)
while (not(string[0] == "b" or string[0] == "B" or string[length-1] == "z"
or string[length-1] == "Z" and length < 6)):
print("Error!")
string = input("Enter a string: ")
print("Nice! ")
至
string = input("Enter a string: ")
length = len(string)
while (not( (string[0] == "b" or string[0] == "B") and (string[length-1]
== "z" or string[length-1] == "Z") and (length == 6))):
print("Error!")
string = input("Enter a string: ")
print("Nice! ")
最重要的python习惯用法之一是保持代码易于阅读。 这可以帮助您快速发现错误,其他人可以很轻松地理解您的代码。 因此,我建议将您的问题编码如下:
string = input("Enter a string: ")
def conditions_satisfied(string):
cond1 = string[0] == "b" or string[0] == "B"
cond2 = string[-1] == "z" or string[-1] == "Z"
cond3 = len(string) == 6
return cond1 and cond2 and cond3
while (not conditions_satisfied(string)):
print("Error!")
string = input("Enter a string: ")
print("Nice! ")
打印:
Enter a string: 1000
Error!
Enter a string: bz
Error!
Enter a string: b1234z
Nice!
如前所述:
<6
编写条件的另一种方式(对我来说更具可读性):
string = input("Enter a string:")
while string[0] not in ["b", "B"] or string[-1] not in ["z", "Z"] or len(string) != 6:
print("Error!")
string = input("Enter a string:")
print("Nice!")
import re
string = input("Enter a string: ")
length = len(string)
if length == 8:
if (re.match(r'(b|B).*.(z|Z)$', string)):
print("Nice! ")
else:
print("Error!")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.