Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 09.05.2023
Сообщений: 1

Игра "Scrabble"

09.05.2023, 09:10. Показов 6359. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Игра Эрудит
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
В игре Эрудит нужно составить как можно более длинное слово из имеющихся букв. Чем более употребима буква, тем меньше очков она приносит.
Стоимость букв в английской версии игры Эрудит:

Очки Буквы
1 A, E, I, L, N, O, R, S, T, U
2 D, G
3 B, C, M, P
4 F, H, V, W, Y
5 K
8 J, X
10 Q, Z
Напишите класс Scrabble, моделирующий слова из имеющихся букв (все буквы в верхнем регистре).
Экземпляр класса при инициализации принимает строку из имеющихся букв. Класс обеспечивает выполнение методов: экземпляр класса можно вызвать с аргументом-словом, при этом возвращается сумма очков, которые приносит слово, если его можно составить из имеющихся букв, если нельзя, то сумма равна нулю;
экземпляры класса можно сравнивать: сначала по сумме очков, которые могут принести все имеющиеся буквы, затем по количеству букв;
__str__ – возвращает строку вида:
Scrabble(’<строка>’)

Пример 1
Ввод Вывод
Python
1
2
3
4
5
6
sc = Scrabble('SCRABBLE')
sc1 = Scrabble('ALLOWANCE')
print(sc('SCLERA'))
print(sc('CRABBY'))
print(sc1('NEWTON'))
print(sc1('CLOWN'))
8
0
0
10
Пример 2
Ввод Вывод
Python
1
2
3
4
5
sc = Scrabble('SCRABBLE')
sc1 = Scrabble('ALLOWANCE')
print(sc('SCRABBLE'))
print(sc1('ALLOWANCE'))
print(sc > sc1, sc <= sc1, sc != sc1, sc >= sc1)
14
14
False True True False

Добавлено через 9 минут
буду сильно благодарен за помощь
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2023, 09:10
Ответы с готовыми решениями:

Игра "Scrabble". В настольной игре Скрабл каждая буква имеет определенную ценность
Игра «Scrabble». В настольной игре Скрабл (Scrabble) каждая буква имеет определенную ценность. В случае с английским алфавитом очки...

Игра +1 - это современная, набирающая популярность игра на просторах интернета
Игра +1 - это современная, набирающая популярность игра на просторах интернета. Она завлекает всех своей простотой и желанием добиваться...

Игра летающая птица. Не работает игра
import pygame import random pygame.init() SCREEN = pygame.display.set_mode((500, 750)) # Setting the display ...

5
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
09.05.2023, 09:51
Цитата Сообщение от Rinat78 Посмотреть сообщение
sc = Scrabble('SCRABBLE')
Цитата Сообщение от Rinat78 Посмотреть сообщение
print(sc('SCLERA'))
То ли я кофе перепил, то ли тут ахинея какая-то написана

Добавлено через 52 секунды
Цитата Сообщение от Rinat78 Посмотреть сообщение
экземпляр класса можно вызвать с аргументом-словом


Добавлено через 24 минуты
Да. Я перепил кофе.
1
Нарушитель
110 / 86 / 32
Регистрация: 10.05.2023
Сообщений: 323
10.05.2023, 02:06
python

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class Scrabble:
    def __init__(self, letters):
        self.letters = letters
 
    def __call__(self, word):
        score = 0
        available_letters = list(self.letters)
 
        for letter in word:
            if letter in available_letters:
                score += self.get_letter_score(letter)
                available_letters.remove(letter)
            else:
                return 0
 
        return score
 
    def __str__(self):
        return f"Scrabble('{self.letters}')"
 
    def __lt__(self, other):
        return self.get_max_possible_score() < other.get_max_possible_score()
 
    def __le__(self, other):
        return self.get_max_possible_score() <= other.get_max_possible_score()
 
    def __gt__(self, other):
        return self.get_max_possible_score() > other.get_max_possible_score()
 
    def __ge__(self, other):
        return self.get_max_possible_score() >= other.get_max_possible_score()
 
    def __ne__(self, other):
        return self.get_max_possible_score() != other.get_max_possible_score()
 
    def get_letter_score(self, letter):
        letter = letter.upper()
        scores = {
            'A': 1, 'E': 1, 'I': 1, 'L': 1, 'N': 1, 'O': 1, 'R': 1, 'S': 1, 'T': 1, 'U': 1,
            'D': 2, 'G': 2,
            'B': 3, 'C': 3, 'M': 3, 'P': 3,
            'F': 4, 'H': 4, 'V': 4, 'W': 4, 'Y': 4,
            'K': 5,
            'J': 8, 'X': 8,
            'Q': 10, 'Z': 10
        }
 
        return scores.get(letter, 0)
 
    def get_max_possible_score(self):
        return sum(self.get_letter_score(letter) for letter in self.letters)
 
 
# Пример использования
sc = Scrabble('SCRABBLE')
sc1 = Scrabble('ALLOWANCE')
 
print(sc('SCLERA'))  # 8
print(sc('CRABBY'))  # 0
print(sc1('NEWTON'))  # 0
print(sc1('CLOWN'))  # 10
 
print(sc > sc1)  # False
print(sc <= sc1)  # True
print(sc != sc1)  # True
print(sc >= sc1)  # False
 
print(str(sc))  # Scrabble('SCRABBLE')
Это полный пример реализации класса Scrabble. Вы можете создать экземпляры класса Scrabble с различными наборами букв и вызывать их с различными словами для подсчета очков. Методы сравнения позволяют сравнивать экземпляры класса Scrabble на основе их максимально возможного количества очков. Метод __str__ возвращает строковое представление экземпляра класса.

Если у вас возникнут дополнительные вопросы, пожалуйста, дайте мне знать!
0
0 / 0 / 0
Регистрация: 08.03.2023
Сообщений: 5
17.09.2023, 16:09
во втором примере на выходе получаем:
14
14
False True False True

хотя должны получать:
14
14
False True True False

не могу понять в чём проблема
0
Нарушитель
110 / 86 / 32
Регистрация: 10.05.2023
Сообщений: 323
22.09.2023, 11:56
Проблема в вашем коде заключается в том, что вы неправильно реализовали методы сравнения (lt, le, gt, ge, ne). Вместо сравнения максимально возможных очков вы используете сравнение текущих очков.
0
 Аватар для mnqp coding
5 / 5 / 0
Регистрация: 29.04.2025
Сообщений: 17
29.04.2025, 18:41
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
class Scrabble:
    LETTER_SCORES = {
        1: "A, E, I, L, N, O, R, S, T, U",
        2: "D, G",
        3: "B, C, M, P",
        4: "F, H, V, W, Y",
        5: "K",
        8: "J, X",
        10: "Q, Z",
    }
 
    def __init__(self, letters):
        self.letters = letters.upper()
        self.letter_counts = {}
        for letter in self.letters:
            self.letter_counts[letter] = self.letter_counts.get(letter, 0) + 1
        self.max_score = self._calculate_max_score()
 
    def _get_letter_score(self, letter):
        for score, letters in self.LETTER_SCORES.items():
            if letter in letters:
                return score
        return 0
 
    def _calculate_word_score(self, word):
        score = 0
        available_letters = self.letter_counts.copy()
        for letter in word:
            if letter in available_letters and available_letters[letter] > 0:
                score += self._get_letter_score(letter)
                available_letters[letter] -= 1
            else:
                return 0
        return score
 
    def _calculate_max_score(self):
        max_score = 0
        for letter, count in self.letter_counts.items():
            max_score += self._get_letter_score(letter) * count
        return max_score
 
    def __call__(self, word):
        return self._calculate_word_score(word.upper())
 
    def __eq__(self, other):
        return (self.max_score, len(self.letters)) == (other.max_score, len(other.letters))
 
    def __lt__(self, other):
        if self.max_score != other.max_score:
            return self.max_score < other.max_score
        else:
            return len(self.letters) < len(other.letters)
 
    def __gt__(self, other):
        if self.max_score != other.max_score:
            return self.max_score > other.max_score
        else:
            return len(self.letters) > len(other.letters)
    
    def __le__(self, other):
        return not (self > other)
 
    def __ge__(self, other):
        return not (self < other)
    
    def __ne__(self, other):
        return not (self == other)
 
    def __str__(self):
        return f"Scrabble('{self.letters}')"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2025, 18:41
Помогаю со студенческими работами здесь

Игра Scrabble
Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в глубину и в...

Игра слов, игра Scrabble
Задание: Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в...

Scrabble игра слов
Задание: Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в...

Scrabble
Мне нужно подготовить проект: сделать игру scrabble, дали часть кода из которого нужно доделать сам проект. На данный момент не могу...

Scrabble в Си
Нужно создать калькулятор для игры Scrabble в языке Си. Есть файл с словарём, который я оставлю в вложени .Словарь во вложении сортирован...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru