首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >/ operand在python 3中不按预期工作

/ operand在python 3中不按预期工作
EN

Stack Overflow用户
提问于 2014-08-17 21:06:16
回答 2查看 96关注 0票数 0

我正在阅读基于python2的Tkinter应用程序开发热点一书,我有以下代码:

代码语言:javascript
复制
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和python 2运行Tkinter时,Tkinter可以工作,但是在python 3和tkinter中运行tkinter时会得到意想不到的结果,是什么原因导致这种行为呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-17 21:37:27

这种差异可能是因为python2.x和python3.x如何处理除法操作符。在这里可以找到一个冗长的描述:

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

票数 1
EN

Stack Overflow用户

发布于 2014-08-17 22:05:50

对于j在范围(列)将生成0,1,2,3

j/bp给出了一个真实的结果: 0,0.5,1.0,1.5 (AFAICT,这是Python3.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中给出了旧的(整数)“地板划分”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25353615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档