首页 文章

循环(和,不,或)

提问于
浏览
0

我需要这个简单问题的帮助 . 我开始学习更多有关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”,输出将为“错误!”如果输入“bz”,输出将为“Nice!” . 它应该在长度小于6时打印错误消息 .

5 回答

  • 0

    你可以做一些简单的事情,如使用 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)操作)失败,条件就会短路 .

  • 0

    最重要的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循环中更新lengh

    • 你说字符串长度必须等于6但你写的条件"it has to be smaller than 6": <6

  • 1

    编写条件的另一种方式(看起来对我来说更易读):

    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!")
    
  • 0
    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!")
    
  • 0

    改变这一点

    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! ")
    

相关问题