【发布时间】:2012-02-05 05:25:31
【问题描述】:
这是我在这个网站上的第二个问题,他们都处理 'if' 语句没有按预期工作。 我已经学习 Python 大约 3-4 个月了,我记得刚开始学习 'for'、'if's 和 'while's 时,我记得认为 'if' 语句是三者中最简单的;我开始意识到“if”语句并不像我曾经想象的那样清晰。
我正在编写一个转换器,它可以在不使用任何 Python 内置数学函数的情况下在二进制、十进制和十六进制之间进行转换。我正在使用 tkinter。
我将询问关于从“二进制”单选按钮转换时交易的问题。在 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' 方法。这可能比需要的多一点,但稍微多一点总比忽略任何数量要好。
因为我最终必须将字符串分解为半字节字符串以进行十六进制转换,所以现在将其设置为
就目前而言,使用 'elif self.hex_bttn' 将二进制转换为十进制,无论选择哪个复选框。 如果我将其更改为“if self.hex_bttn”,那么无论选中哪个复选框,它都会转换为十六进制。
数学和一切工作正常并正确输出。只是与这些“如果”陈述的混合阻碍了我的进步。 在我的初学者看来,这似乎是一个相当简单的测试,但我显然遗漏了一些东西。
如果有人能让我走上正确的道路,我将不胜感激。
祝福 F.
【问题讨论】:
-
print self.hex_bttn输出什么?if语句默认为True如果表达式不是显式错误([]、{}、0、False、None、'')。 -
保持原样:elif self.hex_bttn 我在 3 个位置尝试过。 1) 在两个 if 块之外的方法结束时得到 PY_VAR2。 2) 在 elif self.hex_bttn 之后立即没有任何回报。和 3) if self.dec_bttn 并再次获得 PY_VAR2 之后立即。
-
self.hex_bttn的值是多少? -
我将它们都设置为 BooleanVar()。这意味着我相信,如果一个被选中,则意味着 True 而未选中 = False。
-
试试
if self.het_bttn.get()。
标签: python if-statement python-3.x tkinter