Проблема с генератором поиска слов с питоном - PullRequest
0 голосов
/ 30 сентября 2018

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

Это код, о котором я говорю:

import random
import string

words = ['PYTHON', 'ROBBIE', 'GITHUB', 'BEEF']
grid_size=15
grid = [['_' for _ in range(grid_size)] for _ in range(grid_size)]
orientations = ['leftright','updown','diagonalup','diagonaldown']
#Prints the grid
def print_grid():
    for x in range(grid_size):
        print('\t'*5+' '.join(grid[x]))
#Generates grid
def generategrid(words):
    for word in words:
        word_length = len(word)
        placed = False
        while not placed:
            orientation = random.choice(orientations)
            #Sets orientation given by a random number
            if orientation == 'leftright':
                step_x=1
                step_y=0
            if orientation == 'updown':
                step_x = 0
                step_y = 1
            if orientation == 'diagonalup':
                step_x = 1
                step_y = 1
            if orientation == 'diagonaldown':
                step_x = 1
                step_y = -1
        #We generate a random starting point, then we calculate the ending point and if it exceeds the limit, we calculate the number again
        x_position = random.randint(0,grid_size)
        y_position = random.randint(0,grid_size)
        ending_x = x_position + word_length*step_x
        ending_y = y_position + word_length*step_y
        if ending_x < 0 or ending_x >= grid_size: continue
        if ending_y < 0 or ending_y >= grid_size: continue
        failed=False
        #we set the word on the previously given position
        for i in range(word_length):
            character = word[i]
            new_position_x = x_position + i*step_x
            new_position_y = y_position + i*step_y
            character_at_new_position = grid[new_position_x][new_position_y]
            #if there is some character that could be used to form the word
            if character_at_new_position != '_':
                if character_at_new_position == character:
                        continue
                else:
                        failed = True
                        break      
        if failed:#We do the process from above again until we can put the word on the grid 
            continue
        else:
            #Everything worked perfectly and the word was placed without problems
            for i in range(word_length):
                character = word[i]
                new_position_x = x_position + i*step_x
                new_position_y = y_position + i*step_y
            grid[new_position_x][new_position_y] = character
            placed = True
generategrid(words)
print_grid()

Когда я запускаю программу, она зависает, однако на видеоэтот код, кажется, работает отлично.Любые советы или замечания будут оценены!

1 Ответ

0 голосов
/ 30 сентября 2018

У вас есть бесконечный цикл после while not placed:.Я не совсем уверен, какова цель кода, но я думаю, что вы хотите установить placed = True через определенное время.

Далее в коде это именно так, поэтому мое предположениебудет ошибка отступа.В Python отступ - это то, что определяет область действия цикла, поэтому дважды проверьте отступ в примере, который вы просматриваете.

...