[英]How can I cycle through a string and remove character one by one
提供了一個數字和一個詞。 例如:
value = 3
word = 'NAME'
我必須遍歷單詞NAME
並一次刪除一個字母,最后顯示剩余的最后一個字母。 移除的模式是:從第一個字母開始,循環遍歷value
字母(一旦到達末尾,從索引0開始)並移除到達的字母。
例如,如果值為3
。 它將從N
開始計數3
並刪除第一個M
。
剩下的是NAE
- 從現在是E
的下一個字母開始計數到3
,然后A
將被刪除。
剩余的是NE
- 計數到3
,從E
開始,然后E
將被刪除,只剩下N
。 結果將顯示為N
。 我無法找到一種方法來構建循環來執行此迭代。
到目前為止,我已經手動完成並使它像
if value == 4:
print('A')
elif value == 1:
print('E')
elif value ==2:
print('N')
這是不切實際的,因為該值將是1-100
之間的任何值。 這將自動迭代和刪除並向我顯示最后一個字母的任何其他解決方案。
您實際上無法從字符串中“刪除”字符,因為字符串是不可變的。 您可以做的是使用修改后的字符串重新分配。
至於循環,您可以將%
(模數)運算符用於循環效果。 首先,您需要在每次迭代時標記要計數的第一個索引:
start = 0
然后我們將要繼續迭代,直到只剩下一個字母:
while len(word) > 1:
現在我們要找到下一個要刪除的字母的索引。 正如我所說,使用%
,我們將在最后一個字母后返回0
:
to_remove = (start + value - 1) % len(word)
現在我們需要真正刪除找到的字母,正如我所解釋的,我們必須重新分配變量,我們將通過使用切片來刪除字母:
word = word[:to_remove] + word[to_remove+1:]
總之,我們有類似的東西:
def remove_letters(word, value):
start = 0
while len(word) > 1:
to_remove = (start + value - 1) % len(word)
start = to_remove
word = word[:to_remove] + word[to_remove+1:]
return word
幾個例子:
>>> remove_letters('NAME', 3)
'N'
>>> remove_letters('NAME', 4)
'A'
>>> remove_letters('NAME', 5)
'A'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.