兩個變位詞,第一個詞的第一個字母和后面的字母交換位置,往后遞回直到找到換位后和第二個詞相同的詞,回傳True,否則回傳False。


不懂98行那句a = ss1[i] 到底有啥問題,我是用python和typhon兩個詞測驗的,所以不可能是串列pop完為空導致的,想來想去沒搞懂。還在初學階段,可能程式本身就有問題。。求各位大神解答。
uj5u.com熱心網友回復:
你是要判斷兩個單詞是否是由一樣的字母組成的嗎?只是順序不同那種?uj5u.com熱心網友回復:
嗯嗯 只有字母個數一樣 順序不同uj5u.com熱心網友回復:
還是一樣報這個錯啊
從0開始只是相當于沒變順序s1和s2直接比較了一次
uj5u.com熱心網友回復:
嗯,剛才沒仔細看,我運行了一遍這個函式。看明白了,問題出在你的109行上面,在回圈執行到首字母都是't'的時候,回傳的True是回到109行的函式呼叫了,然后繼續回圈,這時候的ss1變成了['o', 'y', 'h', 'p', 'n'],ss2變成了['y', 'p', 'h', 'o', 'n'],不會跳到你的主程式的函式呼叫。就這樣一直回圈,但是for回圈里面的指標是會一直向上累加的,直到指標大于5,就會報錯uj5u.com熱心網友回復:
你直接把字串排序下對比就可以確定是不是同樣字符組成的字串了
uj5u.com熱心網友回復:
嗯,剛才沒仔細看,我運行了一遍這個函式。看明白了,問題出在你的109行上面,在回圈執行到首字母都是't'的時候,回傳的True是回到109行的函式呼叫了,然后繼續回圈,這時候的ss1變成了['o', 'y', 'h', 'p', 'n'],ss2變成了['y', 'p', 'h', 'o', 'n'],不會跳到你的主程式的函式呼叫。就這樣一直回圈,但是for回圈里面的指標是會一直向上累加的,直到指標大于5,就會報錯
uj5u.com熱心網友回復:
嗯嗯 只有字母個數一樣 順序不同 你是要判斷兩個單詞是否是由一樣的字母組成的嗎?只是順序不同那種?
你直接把字串排序下對比就可以確定是不是同樣字符組成的字串了
uj5u.com熱心網友回復:
我在用不同方法寫同一個問題 嗯嗯 只有字母個數一樣 順序不同 你是要判斷兩個單詞是否是由一樣的字母組成的嗎?只是順序不同那種?
你直接把字串排序下對比就可以確定是不是同樣字符組成的字串了
那你現在寫的是無重復排序對比?
uj5u.com熱心網友回復:
我在用不同方法寫同一個問題 嗯嗯 只有字母個數一樣 順序不同 你是要判斷兩個單詞是否是由一樣的字母組成的嗎?只是順序不同那種?
你直接把字串排序下對比就可以確定是不是同樣字符組成的字串了
那你現在寫的是無重復排序對比?
uj5u.com熱心網友回復:
應該也不會 從python—ypthon—tpyhon到這t相等了進入elif變成了pyhon和yphon比較 進入第二層回圈換一次就相等了呀……不過你說的for回圈指標一直增加是啥意思 求解! 嗯,剛才沒仔細看,我運行了一遍這個函式。看明白了,問題出在你的109行上面,在回圈執行到首字母都是't'的時候,回傳的True是回到109行的函式呼叫了,然后繼續回圈,這時候的ss1變成了['o', 'y', 'h', 'p', 'n'],ss2變成了['y', 'p', 'h', 'o', 'n'],不會跳到你的主程式的函式呼叫。就這樣一直回圈,但是for回圈里面的指標是會一直向上累加的,直到指標大于5,就會報錯
for回圈有個特點是,你后面的range(len(ss1))只判斷一次,也就是說你在回圈里面改變ss1的長度,不會改變i的指標范圍,在你的代碼里面,i是012345,順序增加的。
1、i=0的時候ss1=python,ss2=typhon,執行else
2、i=1的時候ss1=ypthon,ss2=typhon,執行else
3、i=2的時候ss1=tpyhon,ss2=typhon,執行elif,再呼叫一層permutation函式,這時候回傳的是True,沒有任何意義,這時候,ss1=pyhon,ss2=yphon
4、i=3的時候ss1=oyhpn,ss2=yphon,執行else(你的問題就出在這一步,這就是所謂的指標i會持續增加)
5、i=4的時候ss1=nyhpo,ss2=yphon,執行else
6、i=5的時候,報錯,因為你的ss1長度只剩5了,所以會超范圍。也就是你的98行代碼
如果還是不清楚,也可以私聊我
uj5u.com熱心網友回復:
應該也不會 從python—ypthon—tpyhon到這t相等了進入elif變成了pyhon和yphon比較 進入第二層回圈換一次就相等了呀……不過你說的for回圈指標一直增加是啥意思 求解! 嗯,剛才沒仔細看,我運行了一遍這個函式。看明白了,問題出在你的109行上面,在回圈執行到首字母都是't'的時候,回傳的True是回到109行的函式呼叫了,然后繼續回圈,這時候的ss1變成了['o', 'y', 'h', 'p', 'n'],ss2變成了['y', 'p', 'h', 'o', 'n'],不會跳到你的主程式的函式呼叫。就這樣一直回圈,但是for回圈里面的指標是會一直向上累加的,直到指標大于5,就會報錯
for回圈有個特點是,你后面的range(len(ss1))只判斷一次,也就是說你在回圈里面改變ss1的長度,不會改變i的指標范圍,在你的代碼里面,i是012345,順序增加的。
1、i=0的時候ss1=python,ss2=typhon,執行else
2、i=1的時候ss1=ypthon,ss2=typhon,執行else
3、i=2的時候ss1=tpyhon,ss2=typhon,執行elif,再呼叫一層permutation函式,這時候回傳的是True,沒有任何意義,這時候,ss1=pyhon,ss2=yphon
4、i=3的時候ss1=oyhpn,ss2=yphon,執行else(你的問題就出在這一步,這就是所謂的指標i會持續增加)
5、i=4的時候ss1=nyhpo,ss2=yphon,執行else
6、i=5的時候,報錯,因為你的ss1長度只剩5了,所以會超范圍。也就是你的98行代碼
如果還是不清楚,也可以私聊我
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/130434.html
上一篇:python的版本問題,求大佬
下一篇:人臉識別MATLAB語言
