在userinput的if和elif语句中获取意外输出

2024-10-01 02:28:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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!')

Tags: to项目importyourservermailrandommath
3条回答

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

以下代码将为您解决此问题。您只需将!=替换为==

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

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

在python中,您将!===混淆

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

此语句将检查use的输入是否不等于generateOTP()返回的值。只要用户输入与之不匹配,userinput!= generateOTP()的计算结果为True,并显示"welcome sir"

if (userinput!= generateOTP()):

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

你的意思可能是:

if userinput== generateOTP():

函数的作用是:每次调用时生成一个新的OTP。 因此,即使用户输入正确的OTP,它也不会与原始OTP进行验证,而是生成一个新的OTP,并将用户输入的OTP与原始OTP进行比较,后者永远不会相等。自从

print('welcome sir')

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

试试这个

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

相关问题 更多 >