问题描述
我正在尝试使用 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():