在用户输入的 if 和 elif 语句中获得意外输出

问题描述

我正在尝试使用 python 制作 OTP 生成器和验证器。但是我没有得到所需的输出,即使我输入了错误的 OTP,它也会考虑第一个打印语句并打印“欢迎先生”。这不仅发生在这个项目上——它发生在我的每个项目中。我在这里做错了什么?

这是我的代码

import math,random
import smtplib

def sendEmail(to,content):
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.ehlo()
    server.starttls()
    server.login('your mail','your password')
    server.sendmail('your mail',to,content)
    server.close()#please allow less secure app to access this

# function to generate OTP
def generateOTP() :
    # Declare a digits variable
    # which stores all digits
    digits = "0123456789"
    OTP = ""

# length of password can be chaged
# by changing value in range
    for i in range(4) :
        OTP += digits[math.floor(random.random() * 10)]
    return OTP

# Driver code
if __name__ == "__main__" :
    #print(generateOTP())
    content =   generateOTP() 
    to = 'your mail'
    sendEmail(to,content)
    print('mail sent !!')

    userinput = input('enter your otp')
    if (userinput!= generateOTP()):
        print('welcome sir')
    else:
        print('otp not recognized please enter valid otp!')

解决方法

您的第一个 if 条件检查是否 userinput != generateOTP()!= 比较运算符表示 not equal to。所以基本上,您的 if 语句表示如果用户的输入不等于生成的 OTP,则打印“welcome sir”,这与您要实现的逻辑相反。

以下代码将为您解决问题。您需要做的就是将 != 替换为 ==

if (userinput == generateOTP()):
        print('welcome sir')
else:
    print('otp not recognized please enter valid otp!')

但同样,generateOTP 返回一个随机字符串。所以我不明白这段代码有什么意义。用户不知道输入什么输入才能正确。

,

您可以更改这段代码:

userinput = input('enter your otp')
if (userinput == content):
    print('welcome sir')
else:
    print('otp not recognized please enter valid otp!')

,

generateOTP() 函数每次被调用时都会生成一个新的 OTP。 因此,即使用户输入了正确的 OTP,它也不会使用原始 OTP 对其进行验证,而是生成一个新的 OTP 并将用户输入的 OTP 与它进行比较,这永远不会相等。由于

print('欢迎先生')

当OTP不匹配时执行语句,它总是被触发。

试试这个

userinput = input('enter your otp')
if (userinput== content):
    print('welcome sir')
else:
    print('otp not recognized please enter valid otp!')
,

您对 Python 中的 !=== 感到困惑。

!= 表示不等于== 表示等于

该语句将检查用户输入的值是否不等于 generateOTP() 返回的值。只要用户输入不匹配,userinput!= generateOTP() 就会评估为 True 并显示 "welcome sir"

if (userinput!= generateOTP()):

假设我输入 '1234' 并且生成的 OTP 为 '1243'if (userinput!= generateOTP()): 为 True,因为 '1234' 不等于 '1243'

你可能的意思是:

if userinput== generateOTP():