<p>你的代码有几个问题,其中最突出的是在循环中修改<em>last</em>,这没有效果。你知道吗</p>
<p>这里有一个变体,我相信它可以满足您的需求(并且至少满足约束条件(<em>reverse_chunks</em>)。你知道吗</p>
<p>请注意,代码可以短得多,但我觉得这更像是一个学习练习,所以我尽量保持它的简单(和可读性)。你知道吗</p>
<p><em>代码.py</em>:</p>
<pre class="lang-py prettyprint-override"><code>#!/usr/bin/env python3
import sys
def reverse_chunks(s, k):
ret = ""
chunks_count, last_chunk_len = divmod(len(s), k)
for i in range(chunks_count):
start_index = i * k
chunk = s[start_index: start_index + k]
# Although it seems that theproblem is poorly written, posting the code as well. If this is the case, simply remocve the following for loop and decomment the line below
for ch in chunk[::-1]:
if "A" <= ch <= "Z":
ret += "_" + ch.lower()
else:
ret += ch
# ret += chunk[::-1]
if last_chunk_len:
ret += s[-last_chunk_len:]
return ret
def main():
for word, k in [
("MehranSahami", 3),
("MartyStepp", 4)
]:
print("'{:s}' reversed ({:d} char long chunks) is '{:s}'".format(word, k, reverse_chunks(word, k)))
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
print("\nDone.")
</code></pre>
<p><strong>输出</strong>:</p>
<blockquote>
<pre class="lang-bat prettyprint-override"><code>[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056411752]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
'MehranSahami' reversed (3 char long chunks) is 'he_mnarha_sima'
'MartyStepp' reversed (4 char long chunks) is 'tra_met_sypp'
Done.
</code></pre>
</blockquote>
<p><strong>注意:
正如我在代码中指定的,问题文本中似乎存在一个关于大写字母和下划线的问题。如果是这种情况,则当前结果不正常,您应该:</p>
<ul>
<li>删除两个注释行之间的代码(在<em>反向块</em>中)</li>
<li>将2个<sup>nd</sup>一个</li>
</ul>