2017-10-18 112 views
0

我需要关于这个简单问题的帮助。我开始更多地了解while循环,并且我不确定我在做什么错误。While Loops(And,Not,Or)

有3个标准:

1)字符串)必须以 “b” 或 “B”

2)字符串必须具有6个字符

3的最后一个字母字符串必须是“z”或“Z”

它将打印“错误”并在任何条件不满足时再次提示用户。它将打印“很好!”如果它符合标准。

这是我的代码:

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”,输出将是“很好!”。它应该打印错误消息的长度小于6

+2

这听起来像你需要的正则表达式。 –

+0

输入多个字符串后,您不会更新'length'。 – mouviciel

回答

1

你可以做使用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(操作)失败。

+0

TIL'startswith'和'endswith'可以接受测试字符串的一个元组 –

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

这仍然是不正确的。如果字符串以'b'开头,它会在结束时忽略它,并且如果以'z'结尾,它将忽略它开头的内容。这是同样的问题OP –

+0

是不是一样? #@ interntseekho – Jane

+0

否“和”意味着两个条件必须为真,并且“或”意味着如果只有一个条件成立,那么就使所有条件都成立,或者检查它是否不工作,然后检查 – interntseekho

0

一是保持代码易于阅读。这有助于您快速发现错误,而其他人可以毫不费力地理解您的代码。因此,我的建议如下编写你的问题:

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,但是您写出条件“它必须小于6”:<6
0

另一种方式来写的条件(看起来更具可读性给我):

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