2017-10-18 102 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!")