整数与整数之间的比较或在集合或元组中的存在



我遇到了一个问题,我试图使用or将整数类型的变量与其他两个整数进行比较,并且没有意识到这是不可能做到的。

原始代码

model = 4004
if model == 3002 or 3003:
print("model be 300X")
elif model == 4004 or 4003:
print("model be 400X")
else:
print("model type not covered")

300X#,当它应该是400X。

我有两个其他的解决方法,它们看起来都不像python,但它们是有效的。

有更好的方法吗?

import itertools
model = 4004
if model in (3002, 3003):
print("model be 300X")
cycle_dict = {x: z for x, z in zip(range(1, 1001, 1), itertools.cycle(["C", "C", "A", "A", "B", "B"]))}
elif model in (4004, 4003):
print("model be 400X")
cycle_dict = {x: z for x, z in zip(range(1, 2001, 1), itertools.cycle(["C", "C", "C", "C", "A", "A", "A", "A", "B", "B", "B", "B"]))}
else:
print("model type not covered")

if model == 3002:
print("this is a 3002")
cycle_dict = {x: z for x, z in zip(range(1, 1001, 1), itertools.cycle(["C", "C", "A", "A", "B", "B"]))}
if model == 3003:
print("this is a 3003")
cycle_dict = {x: z for x, z in zip(range(1, 1001, 1), itertools.cycle(["C", "C", "A", "A", "B", "B"]))}
if model == 4004:
print("this is a 4004")
cycle_dict = {x: z for x, z in zip(range(1, 2001, 1), itertools.cycle(["C", "C", "C", "C", "A", "A", "A", "A", "B", "B", "B", "B"]))}
if model == 4003:
print("this is a 4003")
cycle_dict = {x: z for x, z in zip(range(1, 2001, 1), itertools.cycle(["C", "C", "C", "C", "A", "A", "A", "A", "B", "B", "B", "B"]))}
print("cycle_dict : ", cycle_dict)

返回一个字典

cycle_dict :  {1: 'C', 2: 'C', 3: 'C', 4: 'C', 5: 'A', 6: 'A', 7: 'A', 8: 'A', 9: 'B', 10: 'B', 11: 'B', 12: 'B', ...

您最初的尝试不工作,因为model == 3002 or 3003被翻译为(model == 3002) or 3003。第一个条件为假,但3003是真值。您需要明确地使用model == 3002 or model == 3003

>>> model = 4004
>>> model == 3002 or 3003
3003
>>> bool(model == 3002 or 3003)
True
>>> model == 3002 or model == 3003
False

现在,至于使用哪种方法,我更喜欢

model in {a, b}

比元组快,因为查找时间复杂度是O(1)。如果你只有几张支票,这几乎无关紧要,但这是要记住的。一般来说,虽然value in tuplevalue in set需要更少的按键输入,其意图是明确的。

根据您的底层逻辑,以下可能更好:

series = model // 1000
if series == 3:
pass
elif series == 4:
pass

最新更新