我终于找到了如何通过观看教程来制作RLE算法,但是这个教程没有解释代码中的一些东西,我不明白为什么我们写j = I而不是j = 0(知道I = 0)它是一样的吗?
我也不明白为什么I = j + 1。为什么i = j + 1在函数的最后?为什么不直接i += 1呢?但是如果我们想在循环中重复一个循环那么我们就用j + 1 ?
第一个while循环是否应该重复第二个while循环,直到字符串完成?
最后为什么encoded_message重复两次?而不是一个。我们返回encoded_message,就是这样吗?我们可以简单地使用print(encode(text))来代替print('已编码的消息是输出',encoded_message)"(当我们将encode(text)放入encoded_message)
我知道我问了很多问题,但我就是不能在不理解它的情况下记住代码,这将是完全无用和低效的
def encode(message):
encoded_message = ""
i = 0
while(i<len(message)):
count = 1
ch = message[i]
j = i # ???
while(j<len(message)-1): # GET IT -----------------------------------------------------------
if message[j] == message[j+1]: # if the previous and next characters are the same
count = count + 1 # we increase count variable
j += 1 # we increase j position
# GET IT ----------------------------------------------------------------------------
else:
break
encoded_message = encoded_message + str(count) + ch # "" + count converted to string + character (ch)
i = j + 1 # ???
return encoded_message
text = input('enter your charcter chain...')
encoded_message = encode(text)
print('The encoded message is the output ',encoded_message)
当我用j = 0替换j = I时,终端中没有显示任何内容
参见:no result
有一个外循环和一个内循环。带有变量i
的外部循环开始在消息上迭代。内循环使用变量j
,并从i
的当前位置开始。
即:当i=0
时,j=0
。但当i=5
(例如),那么j=5
也。
inner loops任务是检查是否有两个或两个以上相同的字符彼此跟随。如果它们这样做,则在内循环结束时相应地增加i
。因此,信息的每个字母只看一次。
这就是为什么j
不应该设置为常量的原因。将其设置为j=0
将导致内部循环在每次迭代时从消息的开头开始。
我添加了两个简单的print()
语句到你的代码来澄清:
def encode(message):
encoded_message = ""
i = 0
while(i<len(message)):
print(f'outer loop: i={i}')
count = 1
ch = message[i]
j = i
while(j<len(message)-1):
print(f'tinner loop: j={j}')
if message[j] == message[j+1]: # if the previous and next characters are the same
count = count + 1 # we increase count variable
j += 1 # we increase j position
else:
break
encoded_message = encoded_message + str(count) + ch # "" + count converted to string + character (ch)
i = j + 1
return encoded_message
text = 'Hello World'
encoded_message = encode(text)
print('The encoded message is the output ', encoded_message)
(请注意:我不知道RLE算法,但只是看了你的代码。)