簡體   English   中英

循環 function 打印出多個相同的輸出而不是一個

[英]Loop function printing out multiple same outputs instead of just one

我編寫了這段代碼來檢查大寫、小寫等,而不使用函數。 它在檢測不同輸入方面工作得很好,但它會為每個輸入打印出 output。 試圖找出錯誤,但這只會使問題惡化。 我的代碼

mylist=[]
end=str("!")
a=0
counter=0
while a != end:
    a=input()
    mylist.append(a)
for i in mylist:
    if i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
        print("1",end='')
    else:
        print("0",end='')
        
    if i in 'abcdefghijklmnopqrstuvwxyz':
        print("1",end='')
    else:
        print("0",end='')

    if i in '0123456789"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c':
        print("1", end='')
    else:
        print('0', end='')
        
    for i in mylist:
        counter=counter+1
        
    counter=counter-1
        
    if counter < 7:
        print("0")
    else:
        print("1")

例如,如果我輸入 ab c de,它會輸出 5 次 0100 和 1 次 0000 而不是 0100 一次。 這就是我要找的。

這是因為您有多個單獨的if塊,並且當只有一個滿足時,這些值將從其他else塊中打印出來。

您應該考慮將if-elif-else塊用作:

if i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
    print("1",end='')
elif i in 'abcdefghijklmnopqrstuvwxyz':
    print("1",end='')
elif some more conditions:
    # do something
else:
    print("0",end='')

此外,如果您只想在所有塊中打印相同的內容,您可以考慮將所有if塊合並為一個:

if i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or i in 'abcdefghijklmnopqrstuvwxyz':
    print("1",end='')

在每個條件后添加一個 Break 語句,因此每次檢查后都會退出循環,並且不會驗證所有條件,從而避免多次打印

您的應用程序中的問題是每個字符都在每個 if 中進行驗證,因此在三個不同的 if 語句中測試一個字符,因此每個字符將 output 三個數字(一個或零)。 之后,您在 main for 中創建了另一個 for 來檢查列表中的字符數。 在主 for 循環之外執行此操作,我認為這就是您想要的。 一個建議,嘗試使用 len(..) 而不是僅僅為了大小而循環整個列表。

我建議你拿一張紙和一支筆,一步一步地測試你的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM