Python 3.x Python:为什么这个Python控制台应用程序中会出现这个错误?

Python 3.x Python:为什么这个Python控制台应用程序中会出现这个错误?,python-3.x,console-application,Python 3.x,Console Application,我正在用Python开发一个控制台应用程序,我想检查有效的电子邮件提供商,比如gmail.com。问题是,当我添加这一行时 def print_valid(address): points = 0 count = 0 chars = [char for char in address] unallowed_symbols = ["#", "$", "%", "^", "&am

我正在用Python开发一个控制台应用程序,我想检查有效的电子邮件提供商,比如gmail.com。问题是,当我添加这一行时

def print_valid(address):
    points = 0
    count = 0
    chars = [char for char in address]
    unallowed_symbols = ["#", "$", "%", "^", "&", "*", "/"]
    email_providers = ["@outlook", "@gmail", "@hotmail", "@yahoo"]

    # point one
    if "@" in address:
        points += 1
        
    # point two
    for letters in chars:
        if "@" in letters:
            count += 1

    if count < 1 or count > 1:
        points -= 1 
    else: 
        points += 1

    # point three
    for symbols in unallowed_symbols:
        if symbols in address:
            points -= 1
        else:
            break
    points += 1

    # point four
    for provider in email_providers:
        if provider in address:
            points += 1
        else: # this line
            points -= 1 # this line

    # check points
    if points == 4:
        return "Valid address"
    else: 
        return "Invalid address"

email = str(input("Enter email: "))
print(print_valid(email))
def print_有效(地址):
分数=0
计数=0
chars=[地址中的字符对应字符]
不允许的_符号=[“#”、“$”、“%”、“^”、“&”、“*”、“/”]
电子邮件提供商=[“@outlook”、“@gmail”、“@hotmail”、“@yahoo”]
#第一点
如果地址中有“@”:
点数+=1
#第二点
以字符书写的信件:
如果以字母“@”表示:
计数+=1
如果计数<1或计数>1:
点数-=1
其他:
点数+=1
#第三点
对于不允许的_符号中的符号:
如果地址中有符号:
点数-=1
其他:
打破
点数+=1
#第四点
对于电子邮件提供商中的提供商:
如果提供方在地址中:
点数+=1
其他:#这一行
点-=1#此线
#检查点
如果点==4:
返回“有效地址”
其他:
返回“无效地址”
email=str(输入(“输入电子邮件:”)
打印(打印有效(电子邮件))
当我添加这两行并输入无效电子邮件时,例如@fake.com表示无效,但对于@gmail.com,它也输出无效。我不想你更正我的密码。我只是想知道为什么会发生这个错误


谢谢

您在
第四点
中额外减少了
点数

代码:


您正在检查每个提供者并递减
,即使您已经遇到了实际的提供者。这将降低“点数”值。一旦遇到提供者,就应该退出该循环。
def print_valid(address):
    points = 0
    count = 0
    chars = [char for char in address]
    unallowed_symbols = ["#", "$", "%", "^", "&", "*", "/"]
    email_providers = ["@outlook", "@gmail", "@hotmail", "@yahoo"]

    # point one
    if "@" in address:
        points += 1
        
    # point two
    for letters in chars:
        if "@" in letters:
            count += 1

    if count < 1 or count > 1:
        points -= 1 
    else: 
        points += 1

    # point three
    for symbols in unallowed_symbols:
        if symbols in address:
            points -= 1
        else:
            break
    points += 1

    # point four
    for provider in email_providers:
        if provider in address:
            points += 1
            break
        # else: # this line
        #     points -= 1 # this line

    # check points
    if points == 4:
        return "Valid address"
    else: 
        return "Invalid address"

# email = str(input("Enter email: "))
email = "ex. @fake.com"
print(print_valid(email))
email = "@gmail.com"
print(print_valid(email))
Invalid address
Valid address