使用range,len和%打印字符串

时间:2019-07-04 20:16:16

标签: python

我是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

2 个答案:

答案 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]