希望你们在这段时间里一切顺利。
这是我的密码:
def ab(n):
first = 0
last = -1
endprod = n[first] + n[last]
endprod2 = n[first+1] + n[last-1]
endprod3 = n[first+2] + n[last-2]
endprod4 = n[first+3] + n[last-3]
endprod5 = n[first+4] + n[last-4]
endprod100 = endprod[::-1] + endprod2[::-1] + endprod3[::-1]+ endprod4[::-1]+ endprod5[::-1]
return endprod100我可以做,但我的不是一个循环。是否有方法将我的代码转换为for循环。所以,增加1,减少1。
谢谢,
发布于 2022-10-27 16:44:59
试试这个:
def ab(n):
result = ''
for j in range(len(n) // 2):
result += n[-j-1] + n[j]
if len(n) % 2 == 1:
result += n[len(n) // 2]
return result你也需要这个角色
if len(n) % 2 == 1:
result += n[len(n) // 2]因为输入字符串可能有奇数字符。
示例:
>>> ab('0123456789')
'9081726354'
>>> ab('01234956789')
'90817263549'如果您想重用您的原始逻辑:
def ab(n):
result = ''
first = 0
last = -1
for j in range(len(n) // 2):
result += n[last-j] + n[first+j]
if len(n) % 2 == 1:
result += n[len(n) // 2]
return result发布于 2022-10-27 17:04:37
你也可以恢复它:
def ab(s):
if len(s)>2:
return s[-1]+s[0]+ab(s[1:-1])
else:
return s但里卡多回答的最后一部分更符合你的问题。
发布于 2022-10-27 16:54:58
您需要为您的循环拆分您的字符串,意味着您首先将字符串分解为一半,然后构建您的字符串,您可以使用zip在多个可迭代的上进行迭代。就像这样:
def ab(s):
out = ""
for v0,v1 in zip(s[:len(s)//2 -1 :-1], s[:len(s)//2 ]):
out += v0 + v1
return out更好的版本,你应该写没有循环。就像这样:
out = "".join(map(lambda x: "".join(x), zip(s[:len(s)//2 -1 :-1], s[:len(s)//2 ])))https://stackoverflow.com/questions/74225466
复制相似问题