Как сократить часть с if-ами?
deck = Deck(deck_size)
for _ in range(commands):
cmd = input().strip().split()
if cmd[0] == CMD_POP_FRONT:
try:
print(deck.pop_front())
except ValueError:
print('error')
continue
if cmd[0] == CMD_POP_BACK:
try:
print(deck.pop_back())
except ValueError:
print('error')
continue
if cmd[0] == CMD_PUSH_FRONT:
try:
deck.push_front(int(cmd[1]))
except OverflowError:
print('error')
continue
if cmd[0] == CMD_PUSH_BACK:
try:
deck.push_back(int(cmd[1]))
except OverflowError:
print('error')
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
deck = Deck(deck_size)
for _ in range(commands):
cmd = input().strip().split()
try:
if cmd[0] == CMD_POP_FRONT:
print(deck.pop_front())
elif cmd[0] == CMD_POP_BACK:
print(deck.pop_back())
elif cmd[0] == CMD_PUSH_FRONT:
deck.push_front(int(cmd[1]))
elif cmd[0] == CMD_PUSH_BACK:
deck.push_back(int(cmd[1]))
except (ValueError, OverflowError):
print('error')
Или сделать что-то вроде map'ы функций и вызывать по ней.
cmd_func = {CMD_POP_FRONT : lambda *x: print(deck.pop_front()) ,
CMD_POP_BACK : lambda *x: print(deck.pop_back()) ,
CMD_PUSH_FRONT: lambda *x: deck.push_front(int(x[0])),
CMD_PUSH_BACK : lambda *x: deck.push_back(int(x[0]))
}
deck = Deck(deck_size)
for _ in range(commands):
cmd = input().strip().split()
try:
cmd_func[cmd[0]](*cmd[1:])
except (ValueError, OverflowError):
print('error')