Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
/在python 3中,操作数未按预期工作_Python_Python 3.x_Tkinter_Python 2.x - Fatal编程技术网

/在python 3中,操作数未按预期工作

/在python 3中,操作数未按预期工作,python,python-3.x,tkinter,python-2.x,Python,Python 3.x,Tkinter,Python 2.x,我正在读一本基于python 2的书,我有以下代码: 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(c

我正在读一本基于python 2的书,我有以下代码:

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()
我有一个结果: 但我需要这个:


Tkinter在我使用Tkinter和python 2运行时可以工作,但在python 3和Tkinter中运行时得到了意外的结果,是什么导致了这种行为?

这种差异可能是由于python 2.x和python 3.x处理除法运算符的方式不同。可在此处找到详细说明:

适用于范围内的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

在Python2.x下,我认为整数的除法产生了一个整数结果:

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

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

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

因此,您看到的颜色分配以及Python2.x和Python3.x之间的变化


试着使用j//bp,它在Python3.x中给出了旧的(整数结果)“地板分割”。顺便说一句,标题非常宽泛。你建议我应该写些什么?谢谢你解决了我的问题,我刚刚将(j/bp)改为(j//bp),现在它的工作与TKinter无关!