Как рефакторинг функции, чтобы вернуть только 1 True значение в списке? - PullRequest
0 голосов
/ 26 января 2020

Функция должна печатать 1 из 4 категорий - A, B, C, D. Есть ли способ реорганизовать его более элегантно?

def get_category(hp):
    A = hp % 4 == 1
    B = hp % 4 == 3
    C = hp % 4 == 2
    D = hp % 4 == 0
    if A:
        print('A')
    if B:
        print('B')
    if C:
        print('C')
    else:
        print('D')

Я хочу как-то сделать предложения if меньше и сделать их однострочными.

вот так:

result_list = [A,B,C,D]

return filter(True, result_list)

1 Ответ

0 голосов
/ 27 января 2020

Поскольку каждое из ваших значений A, B, C, D является сравнением, основанным на том, что можно использовать в качестве индекса массива, вы можете просто использовать массив для своих выходных данных и индекс на основе результат hp % 4:

>>> def get_category(hp):
...     print(['D','A','C','B'][hp % 4])
...
>>> for i in range(10):
...     print(i,end=':\t')
...     get_category(i)
...
0:      D
1:      A
2:      C
3:      B
4:      D
5:      A
6:      C
7:      B
8:      D
9:      A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...