-6

プログラムに問題があり、本当に困っています。何度もエラーが発生します。どうして助けてもらえるのかもわかりません。

私は builtins.TypeError: object of type 'int' has no 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)     
4

4 に答える 4

4

ここ:while len(iPinNo) < 4:

iPinNoは整数であり、整数を呼び出すことは想定されていませんlen()(したがってエラー): に渡されるオブジェクトはlen()、シーケンスまたはマッピングである必要があります。

最初に を使用して文字列に変換しstr()、次に を呼び出しlen()て桁数を取得します。

于 2013-09-24T23:32:49.637 に答える
0

実際のトレースバックを貼り付けると、スタック内のどこ (およびコード内のどの行) で例外がスローされたかを確認できるので便利です。

とにかく、コード内で整数の長さを何度か要求します。例えば

while len(iPinNo) < 4:

intタイプには長さがありません。番号が4桁であることを確認したい場合は、次のいずれかを行うことができます

while len(str(iPinNo)) < 4:

また

while 999 < iPinNo < 10000:
于 2013-09-24T23:35:08.687 に答える
0

10 進数の桁数を取得するには、(10 を底とする) 対数を使用します。

from math import log10, ceil
ceil(log10(iPinNo))

0 の対数は定義されていないため、長さをテストする前に確認する必要があります。


とにかく、マッチング パワー 10 に対してテストしてみませんか?

while iPinNo < 10000:

また

while iPinNo < 10**5
于 2013-09-24T23:37:58.127 に答える
0

には len() メソッドはありません。len( int) はシーケンス用です

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

定義: オブジェクトの長さ (アイテムの数) を返します。引数は、シーケンス (文字列、タプル、またはリスト) またはマッピング (辞書) です。

于 2013-09-24T23:33:46.793 に答える