2017-01-30 2 views
-3

Я создаю функцию, чтобы развить крошечную игру слов. Когда я его создавал, я застрял, когда пытался писать тело. Я искал информацию о Python и могу написать оператор return. Кажется, что это возможно, но я ничего не узнал об этом. Это моя функция тела: Это мой текущий прогресс: я закрываю? или я должен попробовать другой метод?Может ли эта функция возвращать значение int, связывая элементы списка?

def num_words_on_board(board, words): 
    """ (list of list of str, list of str) -> int 

    Return how many words appear on board. 

    >>> num_words_on_board([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], ['ANT', 'BOX', 'SOB', 'TO']) 
    3 
    """ 
    count = 0 
    for word_list in board: 
     if words in ''.join(word_list): 
      count = count + 1 

     return count 
+1

Вы должны объяснить более, что ваша игра предположим, что нужно сделать. ОДНАКО, похоже, что ваш оператор возврата, скорее всего, имеет отступы слишком далеко.То, как оно реализовано в настоящее время, будет рассмотрено только первое слово в 'board' – nbryans

+1

. В вашем выражении' if' появляется запрос о том, есть ли список слов ('words') в строке, возникающей из-за присоединения к другому списку слов в строку; это то, что вы хотите сделать? –

+0

Да! Не могу согласиться с вами подробнее – user7491985

ответ

0

Ваш вопрос не содержит объяснений, но я отвечу на лучшее, что я понял.

Я думаю, вы пытаетесь сделать что-то вроде поискового решения, смешанного с головоломкой для скремблирования?

В любом случае, моя рекомендация - сделать несколько функций для всего, что вам нужно решить. Например:

Как я вижу это, вам нужно знать, могут ли буквы в board составлять каждое из слов в переменной words. Это можно сделать с помощью одной функции. Если вам действительно не нужен порядок слова, просто длина, тогда мы можем сделать это так.

def same (word, letters): 
    temp = [] 
    for every_letter in word: 
     if every_letter in letters and every_letter not in temp: 
      temp.append(every_letter) 

    return len(temp) >= len(word) 

Эта функция принимает только один word и «кучу letters» (например, список из board;)) в качестве параметров, то функция сравнивает каждую букву в word против каждой буквы в «куче letters ", и если он находит совпадение, он добавляет его в переменную temp, в конце итераций, если временная переменная имеет как минимум то же количество букв, что и начальное слово, тогда можно с уверенностью сказать, что это слово может быть встроенный.

* проблема с этой функцией. Если оригинал word имеет повторяющиеся буквы, например, слово «масло», то эта функция не будет работать, но поскольку это не ваш случай, мы можем продолжить.

Для второй части мы должны использовать эту функцию для каждого word в board поэтому мы будем использовать другую функцию для этого:

def num_words_on_board(board, words): 
    count = 0 
    for word in words: 
     for letters in board: 
      if same(word, letters): 
       count += 1 

    print(count) # This is not needed, just here for testing. 
    return count 

И там мы идем. Эта функция должна вернуть count, которая равна 3. Я надеюсь, это поможет вам.

(если кто-то хотят исправить мой код, пожалуйста, не стесняйтесь, это не оптимально любыми средствами. Просто подумал, что было бы легко понять, как это, а не ответ на дубликате вопроса упомянутого Стефана Pochmann)

:)

0

У меня была предыдущая функция, я могу использовать ее для создания этой новой ?. Моя предыдущая функция заключается в следующем:

Защиту board_contains_word (доска, слово): «»»(список список ул, ул) -> Bool

Return True if and only if word appears in board. 

Precondition: board has at least one row and one column. 

>>> board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'ANT') 
True 
>>> board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'NNT') 
False 
>>> board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'NTT') 
True 
""" 
for word_list in board: 
    if word in ''.join(word_list): 
     return True 
return False 
Смежные вопросы