我是Python的新手,我们的实践示例之一在下面的代码中,但是对于代码的作用没有反馈。练习中的问题问“ P打印了多少次”,我在下面提供了输出。
根据我的理解,s的长度是6,范围是0到5,但是由于我们说的是“ range(len(s))”,我们是否基本上要求循环运行6次? / p>
还可以有人帮助我理解打印内容(s [idx%2])吗?打印语句如何生成如下所示的输出?如果我将其更改为print(s [0:2],那么我将水平获得“ pypypy”,这是不同的。
谢谢您的帮助。
s = "python"
for idx in range(len(s)):
print(s[idx % 2])
输出
p
y
p
y
p
y
答案 0 :(得分:2)
Python中的字符串是代表Unicode字符的字节数组。但是,Python没有字符数据类型,单个字符就是长度为1的字符串。方括号可用于访问字符串的元素。因此,您可以通过以下代码段将字符置于位置1(请记住第一个字符的位置为0):
a = "Hello, World!"
print(a[1]) // e
print(a[2]) // l
现在查看为什么代码输出其功能(问题的第二部分)。回想一下%
是modulo operator。
在第一次运行中,idx =0。因此您的语句变为:
print(s[0 % 2]) = print(s[0]) = 'p' -> first letter of s.
下一个idx =1。所以您的语句变为:
print(s[1 % 2]) = print(s[1]) = 'y' -> second letter of s.
下一个idx =2。所以您的语句变为:
print(s[2 % 2]) = print(s[0]) = 'p' -> first letter of s.
依次类推6次(idx取值为0、1、2、3、4、5)。
P.S。评论您对设置print(s[ 0:2 ])
的评论-这称为string slicing(本质上是从字符串中调出一定范围的字符)-[0:2]表示您从索引0开始,一直扩展到但不包括索引2,因此为“ py”。
答案 1 :(得分:2)
我们基本上是要求循环运行6次吗?
是
有人可以帮助我理解打印内容(s [idx%2])吗?
是
print语句如何生成如下所示的输出?
%
运算符是模运算符。它给出了除法的其余部分。对于有问题的范围,结果为
0除以2为0,其余为0
1除以2为0,其余为1
2除以2为1,其余为0
3除以2为1,其余为1
4除以2为2,其余为0
5除以2为2,其余为1
如您所见,余数在0和1之间切换。
索引字符串将因此产生s[0]
和p
s[1]
。