在Python中是否有不同的写多个条件的方法?
Is there a different way to write multiple conditions in Python?
我是 python 的新手,我正在做 TWO + TWO = FOUR,其中每个字母代表 1-10 之间的不同数字。我需要找到所有组合。想知道有没有更好的写法,尤其是'if'和'for'
for t in range (1,10):
for f in range (1,10):
for w in range(10):
for o in range(10):
for u in range(10):
for r in range(10):
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r and t is not f and t is not w and t is not o and t is not u and t is not r and f is not w and f is not o and f is not o and f is not u and f is not r and w is not o and w is not u and w is not r and o is not u and o is not r and u is not r:
print(t,w,o, "and", f,o,u,r)
我试过这样写,但它给了我超过 7 个结果
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r and t != f != w != o != u != r
您可以使用这样的简单技巧:
for t in range (1,10):
for f in range (1,10):
for w in range(10):
for o in range(10):
for u in range(10):
for r in range(10):
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r and len(set([t,f,w,o,u,r])) == 6:
print(t,w,o, "and", f,o,u,r)
想法是 set
只存储不同的数字,所以如果它们成对不同,那么集合的长度应该等于变量的数量
您可以使用 itertools.product
:
for t, f, w, o, u, r in itertools.product(range(1, 10), range(1, 10), range(10), range(10), range(10), range(10)):
如果你不想重复所有 ranges
你可以这样做:
for t, f, w, o, u, r in itertools.product(*([range(1, 10)]*2 + [range(10)]*4)):
但老实说,可读性较差。
聪明地工作,不努力 =)
for t in range (1,10):
for f in range (1,10):
if f == t : continue
for w in range(10):
if w in [t,f] : continue
for o in range(10):
if o in [t,f,w] : continue
for u in range(10):
if u in [t,f,w,o] : continue
for r in range(10):
if r in [t,f,w,o,u] : continue
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r :
print(t,w,o, "and", f,o,u,r)
这将为您节省很多不必要的迭代。
我是 python 的新手,我正在做 TWO + TWO = FOUR,其中每个字母代表 1-10 之间的不同数字。我需要找到所有组合。想知道有没有更好的写法,尤其是'if'和'for'
for t in range (1,10):
for f in range (1,10):
for w in range(10):
for o in range(10):
for u in range(10):
for r in range(10):
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r and t is not f and t is not w and t is not o and t is not u and t is not r and f is not w and f is not o and f is not o and f is not u and f is not r and w is not o and w is not u and w is not r and o is not u and o is not r and u is not r:
print(t,w,o, "and", f,o,u,r)
我试过这样写,但它给了我超过 7 个结果
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r and t != f != w != o != u != r
您可以使用这样的简单技巧:
for t in range (1,10):
for f in range (1,10):
for w in range(10):
for o in range(10):
for u in range(10):
for r in range(10):
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r and len(set([t,f,w,o,u,r])) == 6:
print(t,w,o, "and", f,o,u,r)
想法是 set
只存储不同的数字,所以如果它们成对不同,那么集合的长度应该等于变量的数量
您可以使用 itertools.product
:
for t, f, w, o, u, r in itertools.product(range(1, 10), range(1, 10), range(10), range(10), range(10), range(10)):
如果你不想重复所有 ranges
你可以这样做:
for t, f, w, o, u, r in itertools.product(*([range(1, 10)]*2 + [range(10)]*4)):
但老实说,可读性较差。
聪明地工作,不努力 =)
for t in range (1,10):
for f in range (1,10):
if f == t : continue
for w in range(10):
if w in [t,f] : continue
for o in range(10):
if o in [t,f,w] : continue
for u in range(10):
if u in [t,f,w,o] : continue
for r in range(10):
if r in [t,f,w,o,u] : continue
if 2*(t*100 + w*10 + o) == f*1000 + o*100 + u*10 + r :
print(t,w,o, "and", f,o,u,r)
这将为您节省很多不必要的迭代。