1
#Password Checker Program
def lengthCheck(pWord):
    if len(pWord) >= 6 and len(pWord) <= 12:
        return True
    else:
        return False

def checkUpper(pWord):
    for letters in pWord: #Why is my iteration not working?
        upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        if upperLetters in pWord:
            return True
        else:
            return False

def checkLower(pWord):
    for letters in pWord: #Why is my iteration not working?
        upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        lowerLetters = upperLetters.lower()
        if lowerLetters in pWord:
            return True
        else:
            return False

def checkDigit(pWord):
    for letters in pWord: #Why is my iteration not working?
        digitNumbers = "0123456789"
        if digitNumbers in pWord:
            return True
        else:
            return False

def complexCheck(pWord):
    if checkUpper(pWord) and checkLower(pWord) and checkDigit(pWord):
        return True
    else:
        return False

def passCheck(pWord):
    if lengthCheck(pWord) and complexCheck(pWord):
        return True
    else:
        return False

goodPWord = True
pWord = ""
pWord = input("Please enter your password: ")
goodPWord = passCheck(pWord)
if goodPWord:
    print(pWord, " is a good password.")
else:
    print(pWord, " is not a good password")

我需要帮助解决这个问题,我自己不能犯错误,所以请帮助我。这是我学校的家庭作业,我需要帮助解决这个问题,我自己不能犯错误,所以请帮助我。这是我学校的家庭作业我需要帮助解决这个问题,我自己不能犯错误,所以请帮助我。这是我学校的家庭作业 在此处输入图像描述

4

1 回答 1

0

我将专注于 checkUpper,然后您可以在其他两个函数中进行复制。

你有两个主要问题。

第一个问题是您试图匹配整个大写字母字符串以查看它是否存在于 pWord 中,即使您正在循环 pWord。相反,您需要检查当前循环的字母是否在 upperLetters 中。

这个:

if upperLetters in pWord:

应该是这样的:

if letters in upperLetters:

您正在循环 pWord 并一次收到一封信(您称之为letters)。这就是您需要与upperLetters 进行比较的内容,而不是整个pWord。

第二个问题是您在第一次检查后返回 true 或 false,因此如果第一个字母不是大写字母,则密码的其余部分将被忽略!相反,您需要保留一个布尔变量,仅当没有字母与大写字母匹配时才返回 false。

所以整个函数变成了这样:

def checkUpper(pWord):
    upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #Moved here so you don't define it on every iteration of the loop
    atLeastOne = False #Start as false
    for letters in pWord: #Loop through all letters
        if letters in upperLetters: #Does the current letter exist in upperLetters?
            atLeastOne = True #If so the flag becomes True
            break #exit the loop
    return atLeastOne #Returns false only if none of the letters were upper case

您也可以完全避免使用该标志(如下所示),但我认为上面的内容更易于阅读和理解,并且如果将来您想检查它们是否有超过 1 个大写字母,例如,会更有用,通过保持计数器而不是布尔值。

def checkUpper(pWord):
    upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #Moved here so you don't define it on every iteration of the loop
    for letters in pWord: #Loop through all letters
        if letters in upperLetters: #Does the current letter exist in upperLetters?
            return True
    return False #If none matched

只需将这些更改复制到其余功能即可。

于 2022-02-10T08:53:51.960 回答