编写一个名为reverse\u chunks的函数,该函数接受字符串s和整数k作为参数,并返回一个新字符串,该字符串反转s中每k个字符的相对顺序。例如,reverse\u chunks的调用(“MehranSahami”,3)应一次以3个字符为一组查看字符串,将“Meh”反转为“he\u m”,将“ran”反转为“nar”,以此类推,返回一个“he\u mnarha\u sima”的结果。你知道吗
如果字符串的长度不是k的精确倍数,则字符串末尾少于k个字符的最后一块应保持其原始顺序。例如,如果调用是reverse\u chunks(“MartyStepp”,4),则第一个块“Mart”变为“tra\m”,第二个块“y\u ste”变为“et\u sy”。最后两个字符“pp”少于4个,因此保留原样。所以返回的结果应该是“tra\u met\u sypp”。你知道吗
您可以假设传递给k的值是正整数。你知道吗
约束:不应创建任何数据结构,如数组。但是您可以创建任意多的字符串,也可以使用任意多的简单变量(如int)。你知道吗
(https://www.codestepbystep.com/problem/view/python/strings/reverse_chunks)
def reverse_chunks(s, k):
result= ""
last= -1
for i in range (len(s), last, -1):
if i < len(s):
result+= s[i]
last= int(i) + int(k)
return result
test #1:reverse_chunks("MehranSahami", 3)
expected return:"heMnarhaSima"
your return:"imahaSnarheM"
result: fail
details: incorrect return value
你的代码有几个问题,其中最突出的是在循环中修改last,这没有效果。你知道吗
这里有一个变体,我相信它可以满足您的需求(并且至少满足约束条件(reverse_chunks)。你知道吗
请注意,代码可以短得多,但我觉得这更像是一个学习练习,所以我尽量保持它的简单(和可读性)。你知道吗
代码.py:
输出:
注意: 正如我在代码中指定的,问题文本中似乎存在一个关于大写字母和下划线的问题。如果是这种情况,则当前结果不正常,您应该:
在这里它是在一个班轮:
现在,这一行发生了什么:
range(0, len(s), k)
产生“每k
个值,从0
开始,在k
小于len(s)
的最大倍数处停止。对于k = 3
,这意味着我们得到i = 0, 3, 6, 9, ...
s[i:i+k]
获取从索引i
到索引i+k
的子字符串—因此,字符串中的下一个k
字符。例如,如果i = 0
和k = 3
,则s[i:i+k]
返回Meh
。如果i = 3
,那么它就是ran
,依此类推。你知道吗[::-1]
应用于iterable,就像我们刚刚生成的字符串一样,是一种很容易反转它的方法(它意味着“从开始到结束,以步长-1
进行切片”)。你知道吗最后,我们使用
''.join(...)
将这些不同的k
字符段缝合回一个整体。你知道吗如果最后一个段短于
k
,那么不进行排序就比较困难。但是,您可以在条件中执行此操作:你在找这样的东西吗?你知道吗
相关问题 更多 >
编程相关推荐