Игра "Охотник за сокровищами"

Kim Jon

Новичок
Пользователь
Авг 1, 2021
16
0
1
1. Операционная система - Windows 10
2. PyCharm 2020.1 на компиляторе Python 3.9
3. Библиотеки Random, sys, math
Здравствуйте Друзья!!!
После долгого перерыва в программировании я решил вернуться к изучению этого прекрасного языка Python. И снова наткнулся не понятной мне ошибкой, а именно с условием выбора (if - else). Листинг и скриншот ошибки я выкладываю ниже.
Python:
#Охотник за сокровищами

import random
import sys
import math

def getNewBoard():
    #Создать структур игровоого поля размером 60Х15
    board = []
    for x in range(60): #Главный список из 60 сисков
        board.append([])

    for y in range(15): # Каждый список в главном списке содержит 15 одноименных строк.
                        # Для создания океана используем разные символы, чтобы сделать его реалистечнее
        if random.randint(0, 1) == 0:
            board[x].append('~')
        else:
            board[x].append('`')
        return  board

def drawBoard(board):
    # Изобразить структур данных игрового поля
    tensDigitsLine = ' ' # Создать место для чисел вниз по левой стороне
    for i in range(1, 6):
        tensDigitsLine += (' ' * 9) * str(i)
    # Вывести числа в верхней части поля
    print(tensDigitsLine)
    print(' ' * ('0123456789' * 6))
    print()
    # Вывести каждый из 15 рядов.
    for row in range(15):
        # К однозначным числам нужно добавить пробел
        if row < 10:
            extraSpace = ''
        else:
            extraSpace = ''

        # Создать строку для этого ряда
        boardRow = ''
        for column in range(60):
            boardRow += board[column][row]

    print('%s%s %s %s' % (extraSpace, row, boardRow, row))

    print()
    print(' ' + ('0123456789' * 6))
    print(tensDigitsLine)

def getRandomChests(numChests):
    # Создать список структур данных сундука (двухэлементные списки целочисленые координат x и y)
    chests = []
    while len(chests) < numChests:
        newChests = [random.randint(0, 59), random.randint(0, 14)]
    if newChests not in chests: #Убедиться что сундука еще нет
        chests.append(newChests)
    return chests
def isOnBoard(x, y):
    # Возвращать True, если коорданаты есть на поле; в противном случае вовзвращть False
    return x >= 0 and x <=59 and y >= 0 and y <= 59
def makeMove(board, chests, x, y):
    # Изменить структур данных поля, используя символ гидролокатора. Удалить сундуки.
    # с сокровищами из списка сундуками, как только их нашли. Вернуть False, это
    #  недопустимый ход ход. В противном случае, вернуть строку с результатом этого хода
    smallestDistance = 100 # Все сунлуки расположены ближе чем на расстояни 100 единиц
    for cx, cy in chests:
        distance = math.sqrt((cx - x) * (cx - x) + (cy * y) * (cy * y))
    if distance < smallestDistance: # Нам нужен ближайший сундук с сокровищами
        smallestDistance =round(smallestDistance)
        if smallestDistance == 0:
            #Координаты xy попали прямо в сундуе
            chests.remove([x, y])
    return 'Вы нашли сундук с сокровищами на затонувшем судне!'
        else:
            if smallestDistance < 10:
                board[x][y] = str(smallestDistance)
    return 'Сундук с сокровищами обнаружен на расстоянии %s от гидролокатора!' % (smallestDistance)
И скриншот ошибки
hunter.png
Заранее благодарю Вас за помощь!!!
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Ошибка возникает из-за неправильных отступов, попробуйте разместить return внутри блока условного оператора if:
Python:
if distance < smallestDistance: # Нам нужен ближайший сундук с сокровищами
        smallestDistance =round(smallestDistance)
        if smallestDistance == 0:
            #Координаты xy попали прямо в сундуе
            chests.remove([x, y])
            return 'Вы нашли сундук с сокровищами на затонувшем судне!'
        else:
            if smallestDistance < 10:
                board[x][y] = str(smallestDistance)
                return 'Сундук с сокровищами обнаружен на расстоянии %s от гидролокатора!' % (smallestDistance)
 

Kim Jon

Новичок
Пользователь
Авг 1, 2021
16
0
1
Спасибо большое!!!
В книге листинг неправильно написан
Вообщем надо переходит на другую книгу
 

Форум IT Специалистов