問題是你從原來的元素pop
,從而改變噸的長度他列出,所以循環將停止在一半的元素。
這通常是通過創建一個臨時副本解決:在倒車,你可以使用已有的(容易)替代品的情況下
def reverse_string(a_str):
straight=list(a_str)
reverse=[]
for i in straight[:]: # iterate over a shallow copy of "straight"
reverse.append(straight.pop())
return ''.join(reverse)
print(reverse_string('Why is it not reversing completely?'))
# ?yletelpmoc gnisrever ton ti si yhW
但是:
切片:
>>> a_str = 'Why is it not reversing completely?'
>>> a_str[::-1]
'?yletelpmoc gnisrever ton ti si yhW'
或reversed
迭代器:
>>> ''.join(reversed(a_str))
'?yletelpmoc gnisrever ton ti si yhW'
感謝@JohnColeman的澄清。我只是好奇爲什麼這個邏輯失敗了。是的,這是一個壞主意;來自網站的代碼挑戰'str',我沒有改變它 – Sri