/在python 3中,操作数未按预期工作
我正在读一本基于python 2的书,我有以下代码:/在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
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无关!