我遇到了一个问题,我试图使用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 tuple
或value in set
需要更少的按键输入,其意图是明确的。
根据您的底层逻辑,以下可能更好:
series = model // 1000
if series == 3:
pass
elif series == 4:
pass