Python错误:Indexer错误:获取字符串的每三个字母时,字符串索引超出范围

Python错误:Indexer错误:获取字符串的每三个字母时,字符串索引超出范围,python,Python,我正在尝试编写一个程序,打印用户输入的隐藏消息。应通过读取输入中的每3个字符来发现消息。例如,如果我输入:“pbaynatnahproarnsm”,它应该打印出粗体字母,即“python”。但它得出的结论是: Message? pbaynatnahproarnsm p y t h o n Traceback (most recent call last): File "program.py", line 4, in <module> print(m

我正在尝试编写一个程序,打印用户输入的隐藏消息。应通过读取输入中的每3个字符来发现消息。例如,如果我输入:“pbaynatnahproarnsm”,它应该打印出粗体字母,即“python”。但它得出的结论是:

Message? pbaynatnahproarnsm

p y t h o n Traceback (most recent call last):

  File "program.py", line 4, in <module>
    print(msg[x], end= " ")
IndexError: string index out of range
可以使用Python获取字符串中的每三个字母:

msg=“pbaynatnahproarnsm”
打印(msg[::3])#“python”

似乎您误解了for循环的工作原理,即与while循环相同的代码:

x=0
msg=输入(“消息?”)
当x
以下是循环的等式:

msg=input(“消息”)
对于范围内的i(0,len(msg),3):
##我将是0,3,6,9,12。。。在每次迭代中
c=味精[i]
##c将是第0、第3、第6。。。每次迭代时的字符
打印(c,end=“”)
更简单

msg=input(“消息”)
打印(“”.join([msg[i]表示范围(0,len(msg),3)])

输出为:p y t h o n
对于msg中的i:
迭代
msg
中的每个字符。您使用的
x
从0开始,在每个循环中递增3-因此,当您使用
msg[x]
时,索引
x
是实际当前字符索引值的3倍。只需在循环中打印
x
即可进行检查。当你在索引7的第8个字符上时,
x
是21,它比
msg
(18)的长度长

要获得正确的输出,最快/最简单的方法是使用切片表示法,如:
msg[::3]
。要获取空间,请使用:

如果要将方法用作基数,则仅将
x
增量为1(而不是3),并仅在其索引可被3整除时打印(通过检查被3整除时的值是否为0):

x=0
对于msg中的i:
如果x%3==0:#`%`给出余数
打印(i,end='')
x+=1#增加1,而不是3
#p y t h o n

但这是一个复杂的方法。(如前所述,在循环中使用切片表示法会更好。)

如果对长度为n的整个字符串进行迭代,最终访问的索引将达到3*n。此代码将打印第一个字母,然后是第四个字母,然后是第七个字母,等等。但是循环会对字符串中的每个字母迭代一次,因此
[x]
很快就超过了字符串的末尾。请不要因为有人对你投了反对票而气馁,你的问题问得很好,有完整的输出和错误信息,还有一段关于你正在尝试做什么和你已经尝试了什么的清晰段落。这是最理想的方式
x = 0
msg = input("Message? ") 
for i in msg:
  print(msg[x], end= " ")
  x = x + 3
print(' '.join(msg[::3]))