天天看點

Python3求餘容易犯錯的點

想獲得IP位址遞增的字元串

用Python2,風平浪靜

$ cat python2_ip.py

for i in range(10):
    print '11.0.{0}.{1}/32'.format(i/256,i%256)
$
$ python  python2_ip.py
11.0.0.0/32
11.0.0.1/32
11.0.0.2/32
11.0.0.3/32
11.0.0.4/32
11.0.0.5/32
11.0.0.6/32
11.0.0.7/32
11.0.0.8/32
11.0.0.9/32
           

換成Python3,怎麼出這種結果了?

$ cat python3_ip.py 

for i in range(10):
    print('11.0.{0}.{1}/32'.format(i/256,i%256))
$
$ python3 python3_ip.py 
11.0.0.0.0/32
11.0.0.00390625.1/32
11.0.0.0078125.2/32
11.0.0.01171875.3/32
11.0.0.015625.4/32
11.0.0.01953125.5/32
11.0.0.0234375.6/32
11.0.0.02734375.7/32
11.0.0.03125.8/32
11.0.0.03515625.9/32
           

問題出在i/256!

在python2中,"整數/整數"得到的是商;

在python3中,"整數/整數"得到的是

精确值

,"整數//整數"得到的是商,注意是兩個//

$ cat python3_ip.py 

for i in range(10):
    print('11.0.{0}.{1}/32'.format(i/256,i%256))
$
$ python3 python3_ip.py 
11.0.0.0/32
11.0.0.1/32
11.0.0.2/32
11.0.0.3/32
11.0.0.4/32
11.0.0.5/32
11.0.0.6/32
11.0.0.7/32
11.0.0.8/32
11.0.0.9/32