Есть ли другой способ написать несколько условий в Python? - PullRequest
0 голосов
/ 30 сентября 2019

Я новичок в python, я делаю TWO + TWO = FOUR, где каждая буква представляет различное число от 1 до 10. Мне нужно найти все комбинации. Мне было интересно, есть ли лучший способ написать это, особенно «если» и «для»

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

Ответы [ 3 ]

1 голос
/ 30 сентября 2019

Вы можете использовать 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)):

но, честно говоря, это менее читабельно.

1 голос
/ 30 сентября 2019

Вы можете использовать простой хак, как это:

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 хранит только отдельные числа, поэтому, если они попарно отличаются, длина набора должна быть равнаколичество переменных

0 голосов
/ 30 сентября 2019

Работайте умно, а не усердно =)

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)

Это избавит вас от лишних итераций.

...