我的程序有问题而且我真的很烦我不断收到错误我甚至不知道为什么你能帮助我?
我继续得到builtins.TypeError:'int'类型的对象没有len()错误
当它进入密码验证阶段时我无法弄清楚问题是什么..
#Program asking for a username, password and security pin
#Written by Cole Johnston
#19/08/13 -
#Declare/Initialize variables
sFirstName = "" #User's input of their first name (the minimum is 2 characters) (string)
sLastName = "" #User's input of their last name (the minimum is 4 characters) (string)
sPassword = "" #User's input of their password (it must have a minimum length of 6 characters and a maximum length of 10 characters. It must contain at least 2 numbers in the password, it is case sensitive)
iPinNo = 0 #User's chosen input of security pin (It must be 4 characters long and contain only numbers which are single digit and range between 0-9)
iCount = 0 #The amount of times the user enters an invalid username (integer)
sMessage = "" #Message for user (string)
iFirstNameCheck=0 #Checks first name
iLastNameCheck=0 #Checks last name
iPasswordCheck=0 #Checks password
iPinNoCheck=0 #Checks pin
sUserName = "" #Creates a username for the user (uses first and last name)
sPasswordVerification = "" #Checks the password is correct and same as the first one
def APFirstERROR():
print(("ERROR: Incorrect Attemps consisting of 3 \n\t Closing program"))
sys.ext
def APSecondERROR():
print (("ERROR: Incorrect Attemps consisting of 3 \n\t Closing program"))
sys.ext
def APThirdERROR():
print (("ERROR: Incorrect Attemps consisting of 3 \n\t Closing program"))
sys.ext
def APFourthERROR():
print (("ERROR: Incorrect Attemps consisting of 3 \n\t Closing program"))
sys.ext
#Ask for the users First name
while len(sFirstName) <2:
sFirstName=input("Could you please enter your first name: ")
if len(sFirstName) <2:
print("\tERROR: I'm sorry, you must enter a minumum of two characters")
FirstName = ""
iFirstNameCheck = iFirstNameCheck +1
print (iFirstNameCheck, "Incorrect attempt")
if iFirstNameCheck == 3:
APFirstERROR()
#Ask for the users Last name
while len(sLastName) <4:
sLastName = input("Could you please enter your last name: ")
if len(sLastName) <4 :
print ("\tERROR: I'm sorry, you must enter a minumum of four characters")
LastName = ""
iLastNameCheck = iLastNameCheck +1
print (iLastNameCheck, "Incorrect attempt")
if iLastNameCheck==3:
APSecondERROR()
sUsername = "Congratulations, your username will be " + sLastName[0:4] + sFirstName[0:1]
print (sUsername)
while sPassword is "":
sPassword=input("Could you please enter a password: ")
if len(sPassword) <6 or len(sPassword) >10 :
print("ERROR: I'm sorry, your password must be 6 characters or more but not exceeding 10 characters.\nPlease try again")
if sum(c.isdigit() for c in sPassword) <2:
print("Im sorry, your password does not contain enough numbers.\nThe requirements are a minimum of 2 numbers")
sPassword=""
iPasswordCheck=iPasswordCheck+1
print(iPasswordCheck, "Incorrect Attempt")
if iPasswordCheck ==3:
sPassword="Incorrect"
APErrorThird()
break
#Verify the password
while sPasswordVerification is "":
sPasswordVerification=input("Please enter your password a second time for verification: ")
if sPasswordVerification==sPassword:
print("That password is Accepted")
if not sPasswordVerification==sPassword:
sPasswordVerification=""
print ("I'm sorry, that password is: Not accepted")
a
#ASk user for pin creation
while len(iPinNo) <4:
iPinNo= input("Now could you please create a pin number. The requirements are that it must be only numbers (0-9). Must be 4 numbers long\n\tpin=?\t\n:")
if not re.match("^[1-9]*$", iPinNo):
print ("ERROR: I'm sorry but only numbers between 1-9 are allowed!")
if len (iPinNo) <4:
print ("I'm sorry, your pin number MUST be 4 characters.")
iPinNoCheck=iPinNoCheck+1
print (iPinNoCheck, "Incorrect Attempt")
if iPinNoCheck==3:
iPinNo ="Incorrect"
APErrorFourth()
#Display the Username, the Password and the Pin number
print ("Okay, " + (sFirstName) +" Your username is: ",sUsername)
print("And, Your password is: ",sPassword)
print ("Finally , Your Security pin is: ",iPinNo)
答案 0 :(得分:4)
此处:while len(iPinNo) < 4:
iPinNo
是一个整数,你不应该在整数上调用len()
(因此错误):传递给len()
的对象必须是序列或映射。
首先使用str()
将其转换为字符串,然后调用len()
,以获取数字位数。
答案 1 :(得分:0)
int
没有len()方法,len()是序列
http://docs.python.org/2/library/functions.html#len
定义: 返回对象的长度(项目数)。参数可以是序列(字符串,元组或列表)或映射(字典)。
答案 2 :(得分:0)
好吧,粘贴实际的回溯非常有用,这样我们就可以看到堆栈中的位置(以及代码中的哪一行)抛出了异常。
无论如何,在代码中多次询问整数的长度。例如
while len(iPinNo) < 4:
int
类型没有长度。如果你想确保数字是4位数,你可以做
while len(str(iPinNo)) < 4:
或
while 999 < iPinNo < 10000:
答案 3 :(得分:0)
要获取十进制数的位数,请使用(基数10)对数。
from math import log10, ceil
ceil(log10(iPinNo))
0的对数是未定义的,所以在测试长度之前你必须检查它。
无论如何,为什么不测试10的匹配能力?
while iPinNo < 10000:
或
while iPinNo < 10**5