если (dice1 == dice2) или (dice1 == dice3) или (dice2 == dice1) или (dice2 == dice3)
или (dice3 == dice2) или (dice3 == dice1):
     
    score = # понятия не имею, что здесь поставить

Мне нужно найти способ сделать; если какой-либо из этих вариантов верен, будет выбран правильный вариант и переменные игральных костей складываются, например Два или более кубиков равны? ДА, тогда оценка = сумма двух равных кубиков.

совсем запутались, может кто поможет?

Lolagracew

Ответов: 2

Ответы (2)

Это, вероятно, перебор только для трех кубиков, но вот один способ сделать это, не требующий дублирования кода: коллекции . Счетчик класс имеет most_common метод, который может сказать вам, какое значение встречается чаще всего и сколько раз оно встречается.

из счетчика импорта коллекций

оценка защиты (* кубик):
    (значение, количество), = Счетчик (игральные кости) .most_common (1)
    вернуть 2 * значение, если счетчик> = 2 иначе 0

Примеры:

>>> оценка (6, 3, 6)
12
>>> счет (4, 2, 3)
0
>>> счет (5, 5, 5)
10

Не обязательно спрашивать dice2 == dice1, если вы знаете ответ на dice1 == dice2. И было бы неплохо установить счет на 0, даже если ни один из кубиков не равен

Всего с 3 кубиками, вероятно, проще и быстрее всего протестировать 3 возможные пары.

if dice1 == dice2 or dice1 == dice3:
    score = dice1 * 2
elif dice2 == dice3:
    score = dice2 * 2
else:
    score = 0

Если у вас больше 3 кубиков, вам нужно принять больше решений о том, какой счет дать, если есть более одной пары равных. Вот быстрое решение, которое возвращает оценку из старшей пары:

def best_pair (кубики):
    кандидаты = набор ()
    лучший = 0
    за кубик:
        # не беспокойтесь, если не лучше, чем лучше
        если умереть> лучше всего:
            # мы раньше находили равных?
            если умрут в кандидатах:
                # тогда это новое лучшее
                лучший = умереть
            еще:
                # Возможно, в следующий раз...
                кандидаты.add (умереть)
    лучший результат * 2

best_pair ([1, 3, 1, 4, 3, 5, 3, 6, 1, 2, 4, 5, 1, 1, 1])
# 10

collections.Counter.most_common (), предложенный в ответе @kaya, тоже возможен, но если кости (1, 1, 5, 5) первый элемент of most_common () будет парой единиц. Этого, вероятно, не ожидать, если кости бросают сразу. Решением этой проблемы может быть поиск максимума из коллекций. Вместо этого счетчик.items ():

из счетчика импорта коллекций
игральные кости = [1, 3, 1, 4, 3, 5, 3, 6, 1, 2, 4, 5, 1, 1, 1]
score = 2 * max ((v вместо v, c в Counter (dice) .items (), если c> = 2), по умолчанию = 0)
# 10

2022 WebDevInsider