python — Исправьте ошибку в алгоритме
Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0). Нам известно, где закопан клад, но этого мало: остров полон опасностей, и нужно перемещаться строго по указаниям карты, которая, к счастью, тоже имеется в нашем распоряжении. Мы хотим найти клад как можно скорее.
Сначала вводятся два числа: координаты клада по оси икс (запад-восток) и игрек (юг-север). Затем следует некоторое количество указаний карты. Каждое указание карты состоит из двух строк. Первая строка содержит слово «север», «юг», «запад» или «восток», вторая — натуральное число, количество шагов, которое нужно пройти в данном направлении. Заключительное указание карты состоит только из одной строки, содержащей слово «стоп».
Программа выводит минимальное количество указаний карты, которое нужно выполнить, чтобы прийти к кладу. Гарантируется, что карта приводит к кладу.
x = 0 y = 0 n = 0 fl = True c_x = int(input()) c_y = int(input()) stor = input() cnt = int(input()) while stor != 'стоп': if c_x == x and c_y == y: fl = False if stor == 'север': y += cnt if fl: n += 1 elif stor == 'запад': x -= cnt if fl: n += 1 elif stor == 'юг': y -= cnt if fl: n += 1 elif stor == 'восток': x += cnt if fl: n += 1 stor = input() if stor != 'стоп': kol = int(input()) print(n)
- python
3
в вашем цикле выход происходит только когда будет получено слово «стоп», поэтому и получаете ответ 3
— столько команд до стоп
введено было
вы должны считать шаги и при каждом направлении проверять совпадают ли текущие координаты с координатами клада — если совпадают — выходить из цикла
так же нет проверки, что делать, если клад так и не был достигнут — будет выведено 0
, но это означает, что клад уже находился в координатах (0,0), т. е. нужна проверка и вывод к примеру -1
(Хотя условия задачи этого вроде не требуют)
удобнее кстати не плодить несколько вводов одних и тех же данных, когда можно обойтись одним:
вместо
stor = input() cnt = int(input()) while stor != 'стоп': stor = input() if stor != 'стоп': kol = int(input())
лучше сделать
while True: stor = input() if stor == 'стоп': break kol = int(input())
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Создаем игры, персонажей, объекты в Minecraft на Python — бесплатные видеоуроки для детей — Школа программирования Пиксель на vc.
ruУчим создавать мини-игры в Майнкрафт с помощью языка программирования Python.
2059 просмотров
Возможно ли сделать так, чтобы детские увлечения видеоиграми приносили пользу? Найдено предлагает идеальное решение – научить ребят создавать и компилировать программные коды, оставаясь в любимой игре. Такую возможность можно реализовать в популярной у детей игре Майнкрафт. Ребята смогут строить здания, моделировать предметы, создавать персонажей не вручную, а с помощью текстового кода. В этом им поможет язык программирования Python.
Школа программирования для детей «Пиксель» подготовила серию видеоуроков, чтобы научить ребят писать коды и создавать свои мини-проекты в Майнкрафте по задуманному сценарию.
Практические уроки по Minecraft и Python
Мы уже публиковали серию вводных уроков, из которых вы узнали о базовых понятиях языка Питон, приемах программирования, основных командах. Теперь переходим на более высокий этап и будем глубже изучать программирование на примере Minecraft.
Для начала скачайте и установите саму игру и не забудьте о программе Питон. Сделать все правильно помогут инструкции ниже:
Как скачать Майнкрафт и Python на Windows
Как скачать Майнкрафт и Python на MacOS
Урок 1. Создаем простую аркаду «Лабиринт»
В текстовом редакторе рисуем локацию — лабиринт с многочисленными запутанными проходами. Делаем это при помощи обычных цифр. Обозначаем стартовую и конечную точки, а затем добавляем пункт, где спрячем клад. Дублируем схему в Питоне и выбираем, из каких блоков построим лабиринт. Запускаемся — и вот мы ищем клад, определяя правильное направление движения и блуждая по запутанным коридорам.
Урок 2. Делаем видеоигру «Загадочный дом. Побег от огненного монстра»
Продолжаем обучение программированию для детей и создаем вторую мини-игру. В Питоне моделируем дом и добавляем на игровую сцену две противоположные стихии — огненную и водную. По сценарию, пламя будет преследовать игрока до тех пор, пока не поглотит. Задача персонажа — спастись, загасив монстра десятью литрами собранной воды. Проверьте свои силы, скорость и ловкость!
Урок 3. Создаем мини-аркаду «Железное облако»
Сконструируем платформу и обозначим появление на ней персонажа в начале игры. Постепенно железная плита под ногами тает. Ваша задача — оставаться на поверхности подольше и не свалиться в пропасть. Параллельно игрок должен собирать алмазы — чем больше, тем лучше итоговый результат. Через 15 секунд геймплея становится тяжелее, поскольку рядом появляются динамиты. Проверьте, как долго сможете простоять на «облаке»!
Урок 4. Подключение сервера: играем в Майнкрафт совместно с друзьями
Мы включили в этот курс программирования для детей отдельный видеоурок о выборе хостинга и настройке сервера. Смотрите, и вы узнаете, как играть в Майнкрафт в кооперативном режиме. Ведь командная игра намного интереснее!
Урок 5. Возводим двухмерные небоскребы в Майнкрафте
Постепенно проходя обучение Minecraft для детей, вы подошли к теме строительства зданий. В этом уроке предлагаем постигнуть мастерство возведения небоскребов. Станьте выдающимся архитектором и заботливым градостроителем. Постройте свое первое строение. Выберете для основы металл и стекло, а боковые колонные сделайте изумрудными.
Урок 6. Конструируем игровую модель поп-ита
Вы уже знаете, что в Майнкрафт можно моделировать объекты различной сложности — от простых кубиков до крупных городов. Как насчет того, чтобы для начала смоделировать компьютерную копию любимой многими антистрессовой игрушки поп-ит? Используйте для этого текстовый код Питон, и вскоре у вас появится своя виртуальная модель!
Урок 7. Создаем дверь с потайным кодовым замком
Мы уже сделали пару аркад для Майнкрафта. Мы добавили в этот курс еще один похожий видеоурок — программирование для детей на примере разработки небольшой головоломки. Создаем дверь и встраиваем в нее кодовый замок. Он устроен так, что открывается только в том случае, если пользователь нажмет грани алмаза в правильной последовательности.
Проект относительно сложный, поэтому придется много кодить. Не будем терять время, и приступим!Урок 8. Делаем ловушки в Майнкрафте
Хотите еще раз разыграть друзей? Заманите их в ловушки. Ими в нашем проекте будут капканы с приманками из различных типов блоков – алмазных, золотых, железных. При попадании в зону действия ловушки срабатывает капкан, и жертва оказывается в западне. Пытаясь освободиться, игрок сталкивается с еще одной проблемой. Его начинает атаковать взбесившийся блок из бедрока. Это так круто и неожиданно для ничего не подозревающих друзей!
Мы продолжаем публиковать новые видео по Майнкрафт и Пайтону! Подписывайтесь на наш YouTube-канал, чтобы следить за новыми уроками и освоить еще много других программ.
***
Материал подготовлен школой программирования для детей «Пиксель». Мы знакомим детей 5-17 лет с программированием, учим их создавать игры и сайты, делать анимацию и др. Приходите к нам изучать язык программирования Python внутри вселенной Майнкрафт.
# Это игра про поиск сокровищ. | |
# | |
# Мир представляет собой сетку (определяется GRID_SIZE). Игрок начинает с позиции (1,1). | |
# Монстр случайным образом расположен в мире вместе с числом | .|
# сокровища. Игрок должен найти все сокровища, не будучи съеденным | .|
# монстр. | |
# | |
# Игрок получает предупреждение, когда находится рядом с монстром, что должно помочь ему уклониться от него. | |
# | |
# Игрок может использовать команды L, R, U и D для перемещения. Они могут выйти из игры с | |
# Q-команда. | |
случайный импорт | |
# | |
# Этот класс определяет местоположение в игровой сетке. Он имеет координаты X и Y. | |
класс Точка: | |
х = 0 | |
г = 0 | |
по определению __init__(я, х, у): | |
себя. х = х | |
селф.у = у | |
деф toString(я): | |
возврат «(» + str(self.x) + «,» + str(self.y) + «)» | |
по определению isEqualTo (я, pt): | |
если (pt == Нет): | |
возврат Ложь | |
если (self.x == pt.x и self.y == pt.y): | |
возврат True | |
возврат Ложь | |
по определению isAdjacentTo(self, pt): | |
if ((self. y < pt.y - 1) или (self.y > pt.y + 1)): | |
возврат Ложь | |
если ((self.x < pt.x - 1) или (self.x > pt.x + 1)): | |
возврат Ложь | |
возврат True | |
GRID_SIZE = 5 | |
сокровищ = [‘драгоценный камень’, ‘рубин’, ‘алмаз’, ‘монета’, ‘изумруд’, ‘кубок’] | |
сокровищеLocations = [] | |
расположение монстра = точка (0, 0) | |
playerLocation = Point(0, 0) | |
найденоTreasureCount = 0 | |
# Инициализировать новую игру | |
по умолчанию initGame(): | |
глобальное местоположение игрока | |
глобальных сокровищниц | |
глобальный монстрМестоположение | |
глобально найденоTreasureCount | |
найденоTreasureCount = 0 | |
# Поместите игрока в верхний левый угол сетки (1,1) | |
playerLocation = Point(1, 1) | |
занятых_локаций = [местоположение игрока] | |
# Выбираем случайную локацию для монстра, исключая локацию игрока | |
monsterLocation = ChooseUnoccupiedLocation(occupied_locations) | |
# Случайным образом найдите каждое из сокровищ в незанятых местах | |
для i в диапазоне (0, len(сокровища)): | |
сокровищеLocations. append (выберите UnoccupiedLocation (occupied_locations)) | |
# Найти точку в списке и вернуть ее позицию или -1, если не найдено | |
по определению findPoint (список, pt): | |
для i в диапазоне (0, len (список)): | |
если (список[i].isEqualTo(pt)): | |
возврат я | |
возврат -1 | |
# Выберите случайную незанятую позицию в списке используемых локаций. Новая локация добавлена в | |
# list, и возвращается новое местоположение. | |
по определению выберитеUnoccupiedLocation(usedLocations): | |
, правда: | |
location = Point(random.randint(1, GRID_SIZE), random.randint(1, GRID_SIZE)) | |
, если (findPoint(usedLocations, location) < 0): | |
usedLocations.append(местоположение) | |
адрес возврата | |
# Обработка входа игрока в новую локацию в игре | |
def введитеРасположение (местоположение): | |
глобальное местоположение игрока | |
глобальный монстрМестоположение | |
глобально найденоTreasureCount | |
playerLocation = местоположение | |
print «Теперь вы находитесь в локации» + playerLocation. toString() | |
# Если монстр здесь, игра окончена | |
если (monsterLocation.isEqualTo(playerLocation)): | |
print(«О нет!! Тебя съел голодный монстр!») | |
возврат Ложь | |
# Определить, есть ли сокровища в локации | |
сокровище = findPoint(treasureLocations, playerLocation) | |
если (сокровище >= 0): | |
принт «Ты нашел» + сокровища[сокровища] | |
сокровищ[сокровище] = Нет | |
найденоTreasureCount += 1 | |
# Определить, выиграна ли игра (т. е. все сокровища найдены). В противном случае сообщите игроку, сколько | |
# сокровищ осталось. | |
если (foundTreasureCount == len(сокровища)): | |
print «Вы нашли все » + str(foundTreasureCount) + » сокровища! Вы выиграли!!» | |
возврат Ложь | |
иначе: | |
оставшихся сокровищ = len(сокровища) — foundTreasureCount | |
print «У вас есть » + str(remainingTreasures) + » больше сокровищ» + («s» если осталось Treasures > 1 else «») + » найти!» | |
# Если монстр рядом, дайте знать игроку | |
если (monsterLocation. isAdjacentTo(playerLocation)): | |
print «Рычание рядом слышно!» | |
возврат True | |
# Обработать команду от плеера | |
def processCommand (команда): | |
команда = command.lower() | |
если (команда == «»): | |
печать «Что??» | |
возврат True | |
если (команда == «q»): | |
возврат Ложь | |
новое расположение = нет | |
# Обработка возможной команды движения | |
если (команда == «л»): | |
если (playerLocation. x > 1): | |
newLocation = Point(playerLocation.x — 1, playerLocation.y) | |
элиф (команда == «r»): | |
, если (playerLocation.x < GRID_SIZE): | |
newLocation = Point(playerLocation.x + 1, playerLocation.y) | |
элиф (команда == «u»): | |
если (playerLocation.y > 1): | |
newLocation = Point(playerLocation.x, playerLocation.y — 1) | |
элиф (команда == «d»): | |
, если (playerLocation.y < GRID_SIZE): | |
newLocation = Point(playerLocation. x, playerLocation.y + 1) | |
иначе: | |
печатать «Я не понимаю, что вы имеете в виду» | |
возврат True | |
если (новое расположение == нет): | |
print «В этом направлении двигаться нельзя» | |
возврат True | |
возврат enterLocation(newLocation) | |
# Реализовать игровой цикл, который повторяется до тех пор, пока игра не закончится. | |
защита game_loop(): | |
gameActive = enterLocation(playerLocation) | |
, а gameActive == True: | |
print «\nЧто вы хотите сделать?» | |
опция = raw_input() | |
gameActive = команда процесса (опция) | |
# Инициализировать геймер | |
initGame() | |
game_loop() | |
print «Спасибо за игру!» | |
Как правильно завершить оператор if else в Python (вопрос об игре «Охота за сокровищами»)?
Задать вопрос
спросил
Изменено 1 год, 7 месяцев назад
Просмотрено 377 раз
print('Добро пожаловать на поиски сокровищ!') print('Ваша цель - найти сокровище. ') direction = input('Вы находитесь на перекрестке. Куда вы хотите пойти? Введите "налево" или "направо". \n').lower() если направление == "влево": wait_or_swim = input('Вы подошли к озеру. Посередине озера есть остров. Введите "ждать", чтобы дождаться лодки, или "плыть", чтобы переплыть озеро? \n').lower() направление элиф == "право": print('Вас раздавил грузовик. Игра окончена!') еще: print('Вы выбрали несуществующий вариант.') если wait_or_swim == "ждать": color = input('Вы добрались до острова целым и невредимым. Там есть дом с тремя дверями. Одна красная, одна синяя и одна зеленая. Какую вы выберете? \n').lower() Элиф wait_or_swim == "плавать": print('Вас съела акула.\nИгра окончена.') еще: print('Вы выбрали вариант, которого не существует.') если цвет == "красный": print('Вы попали в комнату, полную огня.\nИгра окончена.') Элиф цвет == "зеленый": print('Поздравляем, вы нашли сокровище!') Элиф цвет == "синий": print('Вы упали в канаву. \nИгра окончена.') еще: print('Вы выбрали несуществующую дверь.\nИгра окончена.')
В приведенном выше коде у меня возникла проблема с завершением кода. Например, Если я записал неправильный вариант во входных данных. Он по-прежнему продолжает игру и просит меня ответить на следующий вопрос, а не завершает ее автоматически. Пожалуйста помоги. Кроме того, это мой первый вопрос о StackOverflow, поэтому, пожалуйста, помогите мне, если возникнут проблемы с форматированием вопроса и если вам трудно понять проблему, с которой я столкнулся.
- питон
- оператор if
2
Вставьте оператор if...else
после нужного варианта. Введя неверный параметр, вы печатаете оператор, а затем он читает следующий код, где wait_or_swim
не определено.
если направление == "лево": wait_or_swim = input('Вы подошли к озеру. Посередине озера есть остров.