Python 3.x python:如果elif else工作不正确。。?

Python 3.x python:如果elif else工作不正确。。?,python-3.x,Python 3.x,我有python 3.4.3 如果我使用: import platform platform.architecture() 结果是: ('64bit', 'WindowsPE') ['win_test_ok'] 我有一个简单的程序(仅供我使用,仅供测试): 结果是: ('64bit', 'WindowsPE') ['win_test_ok'] 但是!如果我重复使用“或”,我的意思是: if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) or

我有python 3.4.3 如果我使用:

import platform
platform.architecture()
结果是:

('64bit', 'WindowsPE')
['win_test_ok']
我有一个简单的程序(仅供我使用,仅供测试):

结果是:

('64bit', 'WindowsPE')
['win_test_ok']
但是!如果我重复使用“或”,我的意思是:

if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) or ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():

它工作得很好:

['Windows', '64-bit']
我试着到处寻找答案,但我失败了。。。
有什么想法吗?

你对基本逻辑运算符有一个基本的误解。表示
x或y
语句的计算方式为“如果x为false,那么y,否则x”。在代码中这些语句的上下文中考虑:

windows = "Windows" or "windows"
linux = "Linux" or "linux"
对于每一个,它将查看
前面的字符串。由于它不是空字符串,因此计算结果为
True
,因此
“Windows”或“Windows”
计算结果仅为
“Windows”
。因此,这两种说法完全相同:

windows = "Windows"
linux = "Linux"
碰巧,您得到了幸运,并且
platform.system()
返回了
“Windows”
,并且您将其放入了外部
if
语句的正确分支中。现在是下一期:

if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
我不确定您认为这是如何工作的,但os.getenv(“处理器体系结构”)中的
“64”
将评估为
True
(在64位环境中),因此该行相当于:

if True in platform.architecture():
…这将不会成功,因为字符串中没有
True
对象

“复制”行按预期工作的原因:

if ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) or ("64" in os.getenv('PROCESSOR_ARCHITECTURE')) in platform.architecture():
…是因为,正如我所提到的,os.getenv('PROCESSOR_ARCHITECTURE')中的
“64”计算结果为
True
。由于这使得
之前的部分为真,因此程序满足并进入
if
块,而不必查看后面的内容

那么如何修复它呢?

如果要判断一个字符串是否与多个字符串中的一个匹配,可以使用列表或元组以及
中的

windows = ("Windows", "windows")

...

if a in windows:
至于另一个,我不完全确定您实际上想做什么,但是删除
子句中的第二个
,似乎可以做您想要做的事情:

if "64" in os.getenv('PROCESSOR_ARCHITECTURE'):

您知道“Windows”或“Windows”
的计算结果是什么吗?是的)您可以尝试仅使用“Windows”运行此代码,问题仍然是
elif a==linux:
无效。如果没有前面的
if
,则不能使用
elif
。压痕也掉了。我很惊讶你没有提到任何错误
windows=“windows”或“windows”
也不会按您预期的方式工作(它总是被分配给第一个单词。它不是某种布尔变量,而是一个
str
ing。这是我关于stackoverflow的第一个问题,所以我用错误的语法“复制粘贴”。很抱歉,这个问题不在语法上,问题在“复制”。如果你正确地编写代码,它将不起作用,只起作用:如果a或B中的a…不起作用汉克斯:请给我一个充分的解释,它工作得很好,我明白我在代码中最大的错误,愿上帝保佑你身体健康!