#python #pygame
Вопрос:
У меня есть фрагмент кода с 18 if
/ elif
утверждениями. is_over
это функция, которая определяет, где находится мышь. pos
представляет положение мыши, и каждая кнопка представляет собой список значений x, y, ширины, высоты. Вот фрагмент моего кода:
if is_over(pos, BUTTON_DIVIDE):
print("/")
elif is_over(pos, BUTTON_MEMORY):
print("mem")
elif is_over(pos, BUTTON_CLEAR):
print("clear")
elif is_over(pos, BUTTON1):
print("1")
elif is_over(pos, BUTTON2):
print("2")
elif is_over(pos, BUTTON3):
print("3")
Хотя это кажется довольно читабельным, мне интересно, есть ли лучший подход. Я думаю, что мог бы намного лучше сжать этот код с помощью словаря, но я не уверен, как это сделать.
Комментарии:
1. новое
match
заявление, поступающее в Python 3.10, вероятно, будет очень полезно именно для этого случая
Ответ №1:
Используйте список кортежей и цикл:
buttons = [
(BUTTON_DIVIDE, "/") , (BUTTON_MEMORY, "mem"), (BUTTON_CLEAR, "clear"),
(BUTTON1, "1"), (BUTTON2, "2"), (BUTTON3, "3")]
for button, text in buttons:
if is_over(pos, button):
print(text)
break
Можно даже хранить и вызывать функции:
def divide():
print("/")
def mem():
print("mem")
def clear():
print("clear")
buttons = [(BUTTON_DIVIDE, divide), (BUTTON_MEMORY, mem), (BUTTON_CLEAR, clear)]
for button, action in buttons:
if is_over(pos, button):
action()
break
Комментарии:
1. Очень часто Python расстраивает меня, но, глядя на этот синтаксис, я на самом деле счастливо вздыхаю.