【问题标题】:My counter isn't running properly我的计数器运行不正常
【发布时间】:2026-01-12 23:25:01
【问题描述】:

我正在为我的班级做一个简单的项目来检查密码是否只包含数字和字母而没有其他字符,但我的变量计数一直出错。

代码运行正确的if 语句,但它不会添加到计数器中。最后,它还返回True 而不是False。有什么帮助吗?

def chaCheck2(password):
    for i in range(len(password)):
        goodCha = 0
        badCha = 0
        if 48 <= ord(password[i]) <= 57 or 65 <= ord(password[i]) <= 90 or 
        97 <= 
        ord(password[i]) <= 122:
            goodCha += 1
            print ("goodCha: ", goodCha)
        else:
            badCha += 1
            print("badCha: ", badCha)
    if badCha > 0:
        print("False")
    else: print("True")

chaCheck2("a.bcd")

输出:

goodCha:  1
badCha:  1
goodCha:  1
goodCha:  1
goodCha:  1
True

【问题讨论】:

  • 这是我使用的输入。 (chaCheck2("a.bcd"))
  • str.isalnum()怎么样?

标签: python string python-3.x counter boolean-logic


【解决方案1】:

注意:此答案仅显示代码中的问题。这根本不是一个好的/快速/pythonic 的解决方案。还有很多其他更好的方法可以做到这一点。

您正在for 循环内创建变量goodChabadCha,因此,在每次迭代中,它们都设置为0。所以,首先,在for 循环之前初始化它们。

其次,你可以使用for i in password:来获取字符,而不是使用for i in range(len(password))

def chaCheck2(password):
    goodCha = 0
    badCha = 0
    for c in password:
        if 48 <= ord(c) <= 57 or 65 <= ord(c) <= 90 or 97 <= ord(c) <= 122:
            goodCha += 1
            print("goodCha: ", goodCha)
        else:
            badCha += 1
            print("badCha: ", badCha)
    if badCha > 0:
        print("False")
    else:
        print("True")

chaCheck2("a.bcd")

输出:

goodCha:  1
badCha:  1
goodCha:  2
goodCha:  3
goodCha:  4
False

【讨论】:

  • 好的,这有很大帮助。我知道有很多更好的方法可以做到这一点,但我只是 1400 CS 课程的初学者。谢谢!
最近更新 更多