<p>你的问题的答案是“你有一个无限循环”。为什么?</p>
<p>检查代码的这一部分:</p>
<pre><code>if j == len(n) - 1:
s += 1
m += n[j] + str(s)
</code></pre>
<p>正如您所看到的,<code>if</code>语句中的块将在<code>j == len(n)-1</code>时执行,这意味着<code>j</code>(您正在使用循环通过<code>n</code>)将到达字符串<code>n</code>上的最后一个元素。因此,在该行之后<code>j</code>将保持相同的值,并且不会执行任何其他内容,这意味着条件<code>j < len(n)</code>将是<code>True</code>永远,因此你的无限循环。现在,你必须在这里选择:</p>
<p><strong>-</strong>您可以在该<code>if</code>块中添加一个<code>j+=1</code></p>
<pre><code>if j == len(n) - 1:
s += 1
m += n[j] + str(s)
j += 1
</code></pre>
<p><strong>-</strong>您可以在所有<code>if</code>块之外添加<code>j+=1</code>并将其从其他<code>if</code>块中移除</p>
<pre><code>while j < len(n):
if j == len(n) - 1:
s += 1
m += n[j] + str(s)
elif n[i] != n[j]:
m += n[i] + str(s)
i += 1
s = 1
else:
i += 1
s += 1
j += 1
</code></pre>
<p>现在,一些选项存在一些逻辑问题。我将重构您的代码并修复这些问题。此外,我强烈建议您使用有意义的变量名。这将帮助其他人和您(将来)理解和调试您的代码</p>
<pre><code>word = input()
result = "" # This will hold the result string
# Will assume user did not input an empty string. You could check that though
currentLetter = word[0] # Get the first letter
currentCount = 1 # Count it as 1
j = 1 # To start from the index 1 and iterate over word letters
while(j < len(word)):
if word[j] != currentLetter:
# if the letter on the current index is different from the currentLetter
# means there was a change so we must add to the result string what
# we counted (letter and count)
result += currentLetter + str(currentCount)
# Get the new letter and set its count to 1
currentLetter = word[j]
currentCount = 1
else:
# Else the letter is the same so far -> increase count
currentCount += 1
j += 1 # Increase index variable
else:
# This else will execute when the while condition is false
# add the remaining values
result += currentLetter + str(currentCount)
print(result)
</code></pre>