int没有len错误请帮助我?

2024-06-16 14:45:55 发布

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

我的程序有问题,真的很烦人我老是出错我都不知道为什么你能帮我?

我一直在获取builtins.type error:“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)     

Tags: andofthenameforinputlenif
3条回答

好吧,粘贴实际的回溯很有用,这样我们就可以看到堆栈中的哪里(以及代码中的哪一行)抛出了异常。

无论如何,在您的代码中,您多次要求整数的长度。例如

while len(iPinNo) < 4:

int类型没有长度。如果你想确定这个数字是4位数,你可以

while len(str(iPinNo)) < 4:

或者

while 999 < iPinNo < 10000:

这里:while len(iPinNo) < 4:

iPinNo是一个整数,不应该对整数调用len()(因此出现错误):传递给len()的对象必须是序列或映射。

首先使用str()将其转换为字符串,然后调用len(),以获取位数。

没有len()方法用于int,len()用于序列

http://docs.python.org/2/library/functions.html#len

定义: 返回对象的长度(项目数)。参数可以是序列(字符串、元组或列表)或映射(字典)。

相关问题 更多 >