提供数字和单词。例如:
value = 3
word = 'NAME'
我必须遍历单词NAME
,一次删除一个字母,最后显示剩余的最后一个字母。删除的方式是:从第一个字母开始,在一个循环中前进value
个字母(一旦到达末尾,从索引0开始),然后删除到达的字母。
例如,如果值为3
。从3
开始算起N
并删除第一个M
。
剩余为NAE
-从下一个字母3
算到E
,然后将A
删除。
剩余为NE
-从3
开始计数到E
,然后E
将被删除,仅剩下N
。结果将显示为N
。我无法找到一种构造循环来执行此迭代的方法。
到目前为止,我已经手动完成并使其像
if value == 4:
print('A')
elif value == 1:
print('E')
elif value ==2:
print('N')
这不切实际,因为该值将介于1-100
之间。任何其他可以自动迭代并删除并向我显示最后一封信的解决方案。
答案 0 :(得分:0)
由于字符串是不可变的,因此您实际上无法从字符串中“删除”字符。您可以执行的操作是使用修改后的字符串重新分配。
对于循环,您可以使用%
(模)运算符来实现循环效果。首先,您需要标记要在每次迭代中计算的第一个索引:
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'