python中字符串是特殊的列表
for x in range(20):
print 'fizz'[x%3*4::]+'buzz'[x%5*4::]or x
这个是由 Jeff Atwood推广的一个编程练习叫FizzBuzz,问题如下:
打印数字1-100,3的倍数打印'Fizz';5的倍数打印'Buzz';既是3又是5的倍数打印'FizzBuZZ'.大牛们给出以上解决方法也不知出处。一运维朋友初学python问我解决方法的意思,以下是说明:
首先要知道python字符串是一种特殊的列表:
>>> a = 'fizz'
>>> type(a)
<type 'str'>
>>> a[0] 'f' >>> a[1] 'i' >>> a[2] 'z' >>> a[3] 'z' >>> a[4] Traceback (most recent call last): File "<pyshell#63>", line 1, in <module> a[4] IndexError: string index out of range >>> len(a) 4 >>> a[0::] 'fizz' >>> a[1:4] 'izz' >>> a[2:4] 'zz' >>> a[3%3*4::] 'fizz' >>> a[1%3*4::] '' >>> a[2%3*4::] '' >>> a[4%3*4::] ''
列表之间可以+ 等同于 list.extend(list) 追加 不去重复。有兴趣朋友可以写一个 相加去重复 相减得到不重复
>>> print '' or 1 1
当x=0时 'Fizz'[0%3*4::] + 'Buzz'[0%5*4::] 在or x python中非空为真
当x=1时 'Fizz'[1%3*4::] + 'Buzz'[1%5*4::] 两个都是为空 所以打印x=1

浙公网安备 33010602011771号