написать код! Нужно дополнить код по условиям задания Дано: Изображение, на котором показан фрагмент звездного неба с круглой или эллиптической (овальной) черной областью. Если это эллипс, то гарантируется, что его длинная ось расположена горизонтально (то есть эллипс не будет повернут). На приведенном выше изображении черный звездолет обрисован светлым контуром, но это только для наглядности, на загруженном для обработки изображении такого контура не будет. Пиксели, затененные звездолетом, имеют идеально черный цвет (значение 0).
Требуется: найти и вывести видимый диаметр звездолета, то есть максимальную ширину непрерывной черной области, в пикселях.
Как отлаживать: закомментируй строку с "url=input()", а вместо нее раскомментируй следующую строку. Также можно раскомментировать строку с print(wa,ha). После этого шаблон программы должен выполняться без ошибок, выводя на консоль "200 200" (размер картинки) и "0" (вместо правильного ответа). Дальше дописываешь, что нужно, и добиваешься правильного ответа. Когда все работает, переносишь готовую программу обратно в Степик, только не забудь снова закомментировать/раскомментировать нужные строки!
Подсказки и пояснения:
Картинка уже загружена в переменную photo (это объект Image из библиотеки PIL, если интересно, документацию можно легко найти в интернете).
Картинка уже преобразована в формат greyscale (градации серого), каждая точка изображения представлена числом от 0 (черная точка) до 255 (белая).
Чтобы получить яркость точки по координатам (x,y), используется вызов photo.getpixel((x,y)). Двойные скобки означают, что x и y объединены в кортеж (x,y), передаваемый в getpixel() как один параметр.
Чтобы найти максимум чего-либо, берем переменную ("текущий максимум"), назначаем ей заведомо маленькое значение. Затем в цикле каждый раз сравниваем с текущим максимумом очередное значение, и если оно больше, то заменяем текущий максимум на это значение.
Чтобы найти длину непрерывной последовательности заданных значений (например, черных точек в строке), берем переменную ("счетчик") с начальным нулевым значением и начинаем просматривать наш массив (строку изображения и т.п.). Каждый раз, когда попадается заданное значение, счетчик увеличивается на 1. Каждый раз, когда попадается любое другое значение, мы запоминаем счетчик как длину последовательности (и, если надо, используем для обновления текущего максимума), после чего его снова обнуляем (поскольку последовательность уже кончилась).
КОД:
# Это загрузка картинки, здесь ничего трогать не надо!
from PIL import Image
import requests
url = input() # для отладки замените на:
# url = "https://stepik.org/media/attachments/lesson/578362/stars1h.png"
loaded_image=Image.open(requests.get(url, stream=True).raw) #загружаем картинку
photo=loaded_image.convert(mode="L") # переводим в greyscale (тона серого)
wa, ha = photo.size # это размеры картинки (ширина и высота, соотв.)
#print(wa,ha) # раскомментируй для отладки - должен выдавать "200, 200"
# Дальше идет ваш код!
alien_ship_width = 0 # здесь должен оказаться результат
# здесь пишем, что еще требуется перед обработкой всей картинки
# ...
for y in range(ha): # цикл просмотра по строкам
# здесь пишем, что требуется перед просмотром очередной строки
# ...
for x in range(wa): # цикл просмотра точек очередной строки
pix = photo.getpixel((x,y)) # взяли точку...
# и вот тут что-то с ней делаем!
# ...
# здесь пишем, что требуется после просмотра очередной строки
# ...
print(alien_ship_width) # выводим полученный результат
Итак у нас есть 6-значное число. Осталось определить систему счисления. каждый элемент (разряд нашего числа) может светиться одним из 4-х цветов (не светиться не может) - значит есть всего 4 состояния у каждого разряда. Значит основание системы счисления = 4.
Итак, у нас получилось 6-значное число в 4-ричной системе счисления.
Таких чисел (различных сигналов, то есть комбинаций) может быть (это ответ):
Алгоритм должен удовлетворять следующим свойствам:
1.Первым свойством алгоритма является дискретный, т. е. пошаговый характер определяемого им процесса. Возникающая в результате такого разбиения запись алгоритма представляет собой упорядоченную последовательность отдельных предписаний (правил, директив, команд) , образующих прерывную (или, как говорят, дискретную) структуру алгоритма: только выполнив требования одного предписания можно приступать к исполнению следующего.
2.Исполнитель может выполнить алгоритм, если он ему понятен, т. е. записан на понятном ему языке и содержит предписания, которые исполнитель может выполнить. Алгоритм не должен содержать предписаний, не входящих в систему команд исполнителя.
3.Алгоритмы, предназначенные для исполнения неким техническим устройством, не должны содержать предписаний, приводящих к неоднозначным действиям. Алгоритм рассчитан на чисто механическое исполнение, и если применять его повторно к одним и тем же исходным данным, то всегда должен получиться один и тот же результат. Это свойство однозначности и определенности – детерминированности – алгоритмов позволяет использовать в качестве исполнителя специальные машины – автоматы.
4.Основополагающим свойством алгоритмов является его массовость, или применимость к некоторому классу объектов, возможность получения результата при различных исходных данных на некоторой области допустимых значений.
5.Цель выполнения алгоритма – получение определенного результата посредством выполнения указанных преобразований над исходными данными. Причем при точном исполнении всех предписаний алгоритмический процесс должен заканчиваться за конечное число шагов. Это обязательное требование к алгоритмам.
6.Если алгоритм должен быть выполнен не просто за конечное время, а за разумное конечное время, то речь идет об эффективности алгоритма. Эффективность алгоритма часто определяет возможность его практической реализации.
Самой распространенной формой представления алгоритмов, адресованных человеку, является обычная словесная запись. В этой форме могут быть выражены любые алгоритмы.
Составим алгоритм определения максимального числа из трех: z:=max(a,b,c).
Решение задачи на ЭВМ можно получить, действуя следующим образом. Сначала найдем наибольшее из двух чисел, например, а и b, сравнив их между собой. Предположим, что исполнитель может выполнить операцию сравнения «больше» . Найденное наибольшее число «запомним» в качестве значения переменной z. Далее сравним значение переменной z с оставшимся числом с. Если с больше z, то присвоим z новое значение – значение с, в противном случае значение z останется прежним. В результате переменная z будет равна наибольшему из a,b,c и будет являться искомым результатом.
Эти рассуждения можно представить в виде словесной записи алгоритма:
Начало
1.Ввести a,b,c.
2.Если a>b, то z::=a;
иначе z:=b;
3.Если c>z, то z:=c.
4.Вывод z.
Конец.
Ход выполнения алгоритма зависит от результатов проверки условий a>b и c>z. Если для введенных значений a, b действительно a>b, то выполняется операция z:=a; если нет, то выполняется z:=b. Таким образом, в зависимости от результата проверки условия a>b требуется выполнить различные действия. В алгоритме на этом шаге предусмотрены оба возможных направления дальнейших вычислений. При проверке условия c>z операция z:=c может выполняться, если действительно c>z, или не выполняться в противном случае.
Этот алгоритм обладает всеми необходимыми свойствами: дискретностью, массовостью, эффективностью.
И так я могу долго