0

インデックス値を取り、入力値に基づいて文字列を出力するプログラムをPythonで作成しようとしています。次に、英語で応答する必要があります。たとえば、インデックス 0 = 値 0 1 つのゼロ、インデックス 1 = 値 10 1 つの 1。1 つのゼロ、インデックス 2 = 値 1110 3 つの 1。1 つのゼロ。、インデックス 3 = 値 3110 1 つ 3 つ。2つ。ワンゼロなど

initialIndexGlobal = "0"

nextIndexGlobal = ""

string = initialIndexGlobal

def stringHead():
    initialIndexGlobal[0]

def StringTail():
    initialIndexGlobal[1:]

def checkValueIterative(string):
    nextIndex = ""
    string = string + "4"
    initialValue = string[0]
    counter = 0

    for w in string:
        if w == initialValue:
            counter = counter + 1
        else:
            secondDigit = str(initialValue)
            firstDigit = str(counter)
            #print(firstDigit + secondDigit)
            global nextIndexGlobal
            nextIndexGlobal = nextIndexGlobal + str(firstDigit) + str(secondDigit)
            string = string[(counter):]
            checkValueIterative(string)
            break
    return(nextIndex)

def checkValueRecursion(index):
    if index == 0:
        print(initialIndexGlobal)
    else:
        checkValueIterative(initialIndexGlobal)
        global initialIndexGlobal
        global nextIndexGlobal
        initialIndexGlobal = nextIndexGlobal
        nextIndexGlobal = ""
        checkValueRecursion(index-1)

def runLen(string, index):
    if string == '':
        return 0
    if stringHead()==index:
        return 1 + runLen(StringTail, index)
    else:
        return 0


def say(string):
    if string == "":
        return
    else:
        if ( string[ 0 ] )== "0" and runLen( string,string[ 0 ]==3 ):
            print( "three zeros" )
            return say( string[ 3:1 ] )

        elif (string[ 0 ] == "0" and runLen( string,string[ 0 ]==2 ) ):
            print( "two zeros" )
            return say( string[ 2:1 ] )

        elif ( string[ 0 ]=="0" ):
            print( "one zero" )
            return say( string )

        if (string[ 0 ] == "1" and runLen( string,string[ 0 ]==3 ) ):
            print( "three ones" )

            return say( string[ 3:1 ] )
        elif (string[ 0 ] == "1" and runLen( string,string[ 0 ]==2 ) ):
            print( "two ones" )
            return say( string[ 2:1 ] )

        elif (string[ 0 ] == "1" ):
            print( "one one" )
            return say( string )

        if (string[ 0 ] == "2" and runLen( string,string[ 0 ]==3 ) ):
            print( "three twos" )
            return say( string[ 3:1 ] )

        elif (string[ 0 ] == "2" and runLen( string,string[ 0 ]==2 ) ):
            print( "two twos" )
            return say( string[ 2:1 ] )

        elif (string[ 0 ]=="2" ):
            print( "one two" )
            return say( string )

        if (string[ 0 ]=="3"and runLen( string,string[ 0 ]==3 ) ):
            print( "three threes" )
            return say( string[ 3:1 ] )

        elif (string[ 0 ]=="3"and runLen( string,string[ 0 ]==2 ) ):
            print( "two Threes" )
            return say( string[ 2:1 ] )

        elif (string[ 0 ]=="3" ):
            print( "one three" )
            return say( string )



#index = input("Enter Index value here: ")
checkValueRecursion(10)
runLen(string, initialIndexGlobal)
say(string)
input()

これは私がこれまでに持っているものです。インデックス値は正しく計算されますが、英語では繰り返されません。代わりに、クラッシュするまで繰り返します。これを修正するにはどうすればよいですか?

4

2 に答える 2

1

わかりました、私たちはそれを理解しました。古い say() を完全に削除し、書き直しました。回答ありがとうございます。

initialIndexGlobal = "0"
nextIndexGlobal = ""
stringComposition = ""

def numberToLetter(string):
    numtotext = ""
    for w in string:
        if w == "0":
            numtotext = numtotext + "zero "
        elif w == "1":
            numtotext = numtotext + "one "
        elif w == "2":
            numtotext = numtotext + "two "
        else:
            numtotext = numtotext + "three "
    return numtotext

def checkValueIterative(string):
    nextIndex = ""
    string = string + "4"
    initialValue = string[0]
    counter = 0
    for w in string:
        if w == initialValue:
            counter = counter + 1
        else:
            secondDigit = str(initialValue)
            firstDigit = str(counter)
            #print(firstDigit + secondDigit)
            global nextIndexGlobal
            nextIndexGlobal = nextIndexGlobal + str(firstDigit) + str(secondDigit)
            string = string[(counter):]
            checkValueIterative(string)
            break
    return(nextIndex)

def checkValueRecursion(index):
    if index == 0:
        return
    else:
        checkValueIterative(initialIndexGlobal)
        global initialIndexGlobal
        global nextIndexGlobal
        initialIndexGlobal = nextIndexGlobal
        nextIndexGlobal = ""
        checkValueRecursion(index-1)

def main():
    indexValue=int(input("What is the index value?"))
    checkValueRecursion(indexValue)
    print(str(indexValue) + " : " + str(initialIndexGlobal) + " : " + str(numberToLetter(initialIndexGlobal)))
main()
于 2013-10-01T23:02:44.917 に答える
0

say文字列「0」で無限にループします

say("0")
# runLen("0",False) and runLen("0",True) won't return 2 or 3
# We move on to the line:
    if string[ 0 ]=="0": #this passes because it is true.
        print('one zero')
        say(string)

注意として、あなたはたくさんの を持っていますrunLen( string,string[ 0 ]==3 )、私はあなたが本当に意味していると思いますrunLen( string,string[ 0 ] ) ==3. また、string = initialIndexGlobalおそらく削除する必要があります。

于 2013-10-01T21:46:41.037 に答える