2013-12-14 46 views
-3

我的計劃是一個密碼強度模擬器每當我輸入密碼,它總是輸出得分爲1使用.isupper()

def upper_case(): 
    points = int(0) 
    limit = 3 
    for each in pword: 
     if each.isupper(): 
      points = points + 1 
     if points > limit: 
      points = limit 
     else: 
      points = points + 0 
     return points 

pword = raw_input("ENTER: ") 
upper_case() 

points = 0 
points += upper_case() 

print points 
+2

您從for循環中返回點,所以它始終在第一個字符後返回。 – RemcoGerlich

+0

通過一個縮進級別取消您的「返回點」。 –

回答

2

您正在返回points太早,因爲你有麻煩縮小了它太多。刪除縮進:

def upper_case(): 
    points = int(0) 
    limit = 3 
    for each in pword: 
     if each.isupper(): 
      points = points + 1 
     if points > limit: 
      points = limit 
     else: 
      points = points + 0 
    return points 

您可以簡化這:

def upper_case(pword): 
    return min((sum(1 for each in pword if each.isupper()), 3)) 

,我改變了功能,採用參數,而不是使用一個全球性的。

+0

謝謝非常多!幫助! – USER1

+0

@ USER1如果你注意到了你最後一個相同的問題,幾個非常好的密碼評分解決方案向你呈現,包括如何正確迭代,計算一個值並返回它。 –