/操作数在python 3中没有按预期工作

时间:2014-08-17 21:06:16

标签: python python-3.x tkinter python-2.x

我正在阅读基于python 2的书Tkinter GUI Application Development Hotshot,我有这段代码:

from tkinter import *

rows = 5
un = 2
bp = 2
columns = un * bp
root = Tk()
right_frame = Frame(root)
right_frame.pack()
button = [[0 for x in range(columns)] for x in range(rows)]
for i in range(rows):
    for j in range(columns):
        active = False
        color = '#f3f3f3' if (j / bp) % 2 else '#9a72a9'
        button[i][j] = Button(right_frame, bg=color, relief='flat', width=1)
        button[i][j].grid(row=i, column=j)
root.mainloop()

我有这个结果: img1 但我需要这个: img2

当我使用Tkinter和python 2运行时,Tkinter工作但是在python 3和tkinter中运行它时会得到意想不到的结果,这会导致什么行为?

2 个答案:

答案 0 :(得分:1)

差异可能是由于python 2.x和python 3.x如何处理除法运算符。可以在这里找到冗长的描述:

http://legacy.python.org/dev/peps/pep-0238/

答案 1 :(得分:0)

表示范围内的j(列) 将生成0,1,2,3

j / bp给出了一个真实的结果:0,0.5,1.0,1.5(AFAICT这是Python 3.0中的新功能)

所以(j / bp)%2给出:0,0.5,1.0,1.5

在Python 2.x下,我认为整数除法产生了整数结果:

j / bp给出0,0,1,1

(j / bp)%2给出0,0,1,1

0被解释为False,任何其他数字被解释为True

因此,您看到的颜色分配以及Python 2.x和Python 3.x之间的差异

尝试使用j // bp给出旧的(整数结果)" floor division"在Python 3.x。