繁体   English   中英

While循环(与非或)

[英]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.startswithstr.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!

如前所述:

  • 你不会在while循环中更新长度
  • 您说字符串长度必须等于6,但是您写条件“它必须小于6”: <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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM