- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我在此站点上的第二个问题,它们都处理未按预期工作的“if”语句。我已经学习 Python 大约 3-4 个月了,我记得刚开始学习“for”、“if”和“while”时,我记得我认为“if”语句是这三个语句中最简单的一个;我开始意识到“如果”语句并不像我曾经想的那么明确。
我正在编写一个转换器,它可以在不使用任何 Python 内置数学函数的情况下在二进制、十进制和十六进制之间进行转换。我正在使用 tkinter。
The problem I will ask about deals with when the convert from 'binary' radio button is selected.在 3 个“转换自”单选按钮下方是 3 个“转换为”复选框。如果选中 dec_bttn 复选框,则以下代码旨在将二进制转换为十进制,如果选中 hex_bttn 复选框,则将其转换为十六进制:
def from_binary(self, dec_bttn, hex_bttn):
""" Performs conversion from base2 to base10 and base16. """
bits = '1010' #actual code used -> self.input_str.get()
exp = len(bits) -1 #actual code used -> len(self.input_str.get()) - 1
# operate on valid string
# converts to decimal
if self.dec_bttn:
dtot = 0
while exp >= 1:
for i in bits[:-1]:
if i == "1":
dtot += 2**exp
elif i == "0":
dtot = dtot
exp -= 1
if bits[-1] == "1":
dtot += 1
self.output_disp.delete(0.0, END)
self.output_disp.insert(0.0, dtot)
# convert to hex
elif self.hex_bttn:
hex_digits = {
10: 'a', 11: 'b',
12: 'c', 13: 'd',
14: 'e', 15: 'f'
}
string_length = len(bits)
exp = len(bits) - 1
if string_length <= 4:
htot = 0
while exp >= 1:
for i in bits[:-1]:
if i == "1":
htot += 2**exp
elif i == "0":
htot = htot
exp -= 1
if bits[-1] == "1":
htot += 1
for i in hex_digits.keys():
if i == htot:
htot = hex_digits[i]
else:
htot = htot
self.output_disp.delete(0.0, END)
self.output_disp.insert(0.0, htot)
我已经发布了整个“from_binary”方法。这可能比需要的略多,但多一点总比忽略任何数量要好。
因为我最终必须将字符串分成半字节字符串以进行十六进制转换,所以它现在设置为 <= 4。所以我只使用 4 位字符串测试它。
就目前而言,无论选中哪个复选框,使用“elif self.hex_bttn”都会将二进制转换为十进制。如果我将其更改为“if self.hex_bttn”,那么无论选中哪个复选框,它都会转换为十六进制。
数学和一切工作正常并正确输出。正是这些“如果”语句的混合阻碍了我的进步。在我的初学者看来,这似乎是一个相当简单的测试,但我显然遗漏了一些东西。
如果有人能让我走上正确的道路,我将不胜感激。
祝福F.
最佳答案
if
语句和它的补充 elif
,适用于 Boolean values .如果变量或正在测试的任何内容都不是 bool 值,那么它会被强制并以真/假方式理解。
任何非零且非空的对象都被解释为“真”。因此,假设 dec_bttn
和 hex_bttn
是 Tkinter 复选框,然后 Python 正在检查复选框自身 的 bool 值,并在看到它们为真时继续执行第一个 if
block 。 p>
在您的代码中的某处,您可能正在像这样初始化 Tkinter 复选框:
self.dec_bttn = Checkbutton(root, Text='To decimal', ... )
self.hex_bttn = Checkbutton(root, Text='To hex', ... )
不是像这样初始化它们,您需要有可以存储复选框“已选中”状态的变量,如下所示:
self.dec_checked = IntVar()
self.hex_checked = IntVar()
self.dec_bttn = Checkbutton(root, Text='To decimal',
variable=self.dec_checked, ... )
self.hex_bttn = Checkbutton(root, Text='To hex',
variable=self.hex_checked, ... )
注意 IntVar
。那就是存储值的地方。但是,您不必使用 IntVar
,您也可以使用 BooleanVar
,或者任何其他 Tkinter 变量类型,事实上。
但是,我跑题了,我看到您已经在使用 BooleanVar
。所以,其中大部分你已经知道了。但是,仅仅检查 self.dec_bttn
不起作用的原因是因为 dec_bttn
是一个对象,而不仅仅是一个简单的 bool 值。
在 if
语句中使用 self.dec_bttn.get()
检查复选框的状态。
查看 Tkinter reference对于与 Tkinter 变量类型关联的其他一些方法。
关于python - if/elif 混搭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9147128/
这是我在此站点上的第二个问题,它们都处理未按预期工作的“if”语句。我已经学习 Python 大约 3-4 个月了,我记得刚开始学习“for”、“if”和“while”时,我记得我认为“if”语句是这
我正在寻求有关 Google map 实现的帮助。我必须编写 (JS) 一个“智能信息框/气泡”,它可以根据标记智能地定位自己,并且该标记的位置相对于 map View 的边缘。 VW 在他们的定位器
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我在使用这个小脚本时遇到了一些问题,它允许我使用 flickr 的谷歌地图和照片创建混搭。它创建了一张从罗马到米兰的简单 map ,然后根据地理标记从 flickr 请求十张图像。所以最后,它将每张照
我需要一些关于如何显示 map (对所有人公开)并允许任何用户(我应该能够跟踪其电子邮件)点击 map 上的几个点并制作适当的标记(它应该只是可见的)一点,没什么特别的)。其他用户也应该看到这些点。我
我正在创建一个表单,人们可以在其中选择一个新团队然后输入其位置,或者如果他们从列表中选择一个团队,我希望禁用输入 - 并在中给出所选团队的位置输入框。到目前为止,这是我的代码。它不起作用。 :(
我正在开发一个 iOS 应用程序,该应用程序使用 REST API 聚合来自不同服务(Google 日历、Basecamp...)的内容(即事件)。 我不知道在服务器端查询这些服务是否更有意义,而不是
我认为这可能是我知道答案但只是不喜欢的情况。 我的出发点是之前的一个问题, Hibernate @Entity conflict with Spring @Autowired for non-colu
我正在尝试使用“NGSI 源”和“ map 查看器”组件构建一个简单的 Wirecloud 应用程序混搭,如描述的那样 here但使用 130.206.80.40 提供的测试服务。由于本人是FIWAR
我是一名优秀的程序员,十分优秀!