Решение модуля 5.8 Инди-курс программирования на Python

Модуль 5.8 (Вложенные списки, Часть 2). Вложенный список – это список, элементами которого являются также списки. 

Ниже представлены примеры задач с решением на тему Вложенные списки.

Манао работает на спортивном телевидении. Он долгое время наблюдал за футбольными матчами чемпионата одной страны и начал замечать разные закономерности. Например, у каждой команды есть две формы: домашняя и выездная. Когда команда проводит матч на своем стадионе, футболисты надевают домашнюю форму, а когда на чужом — выездную. Единственное исключение из этого правила — когда цвет домашней формы принимающей команды совпадает с цветом формы гостей. В таком случае домашняя команда облачается в свою выездную форму. Цвета домашней и выездной формы для каждой команды различны.

В чемпионате страны участвует n команд и он состоит из n·(n - 1) матчей: каждая из команд принимает каждую другую команду на своем стадионе. Манао задумался, а сколько раз в течение одного чемпионата случится, что команда, играющая на своем стадионе, оденет выездную форму? Обратите внимание, что для подсчета этого количества порядок матчей не играет никакого значения.

Вам даны цвета домашней и выездной формы каждой команды. Для удобства эти цвета пронумерованы целыми числами таким образом, что никакие два разных цвета не имеют одинаковый номер. Помогите Манао найти ответ на его вопрос.

n = int(input())    # кол-во команд
mas = []
for i in range(n):
    mas.append(list(map(int, input().split())))  # формируем список списков
count_match = 0
for i in range(n):      # Сравниваем домашние игры всех команд
    for j in range(n):
        if mas[i][0] == mas[j][1]:
            count_match += 1
print(count_match)

«Морской бой» — игра для двух участников, в которой игроки по очереди называют координаты на неизвестной им карте соперника. Если у соперника по этим координатам имеется корабль, то корабль или его часть «топится», а попавший получает право сделать еще один ход. Цель игрока — первым поразить все корабли противника.

«Морской бой» очень популярен среди учеников одной физико-математической школы. Ребята очень любят в него играть на переменах. Вот и сейчас ученики Иннокентий и Емельян начали новую партию.

Правила, по которым ребята расставляют корабли перед началом партии, несколько отличаются от классических. Во-первых, игра происходит на поле размером N×M, а не 10×10. Во-вторых, число кораблей, их размер и форма выбираются ребятами перед партией — так играть намного интереснее.

Емельян уже расставил все свои корабли, кроме одного однопалубного. Такой корабль занимает ровно одну клетку.

Задана расстановка кораблей Емельяна. Найдите число способов поставить оставшийся однопалубный корабль. При этом учитывайте, что по правилам его можно ставить только в ту клетку, все соседние с которой не заняты. В этой задаче соседними считаются клетки, имеющие общую сторону.

Программа считывает два числа: N и M (1 ≤ N, M ≤ 100). Последующие N строк описывают игровое поле — каждая из них содержит M символов. Символом «.» (точка) обозначена свободная клетка, символом «*» (звездочка) — занятая кораблем.

Необходимо вывести на экран ответ на задачу

n, m = map(int, input().split())   # ввод строки/стобцы
a = [[str(j) for j in input()] for i in range(n)]  # ввод поля боя
count = 0                      # счетчик вариантов
for i in range(n):             # цикл по строкам поля
    for j in range(m):         # в нем цикл по столбцам
        if a[i][j] != '*':     # если текущая клетка не корабль
            for d in (-1, 1):  # то проход по соседям сверху-слева + снизу-справа
                ai = i + d     # адрес по строке сверху или снизу
                if 0 <= ai < n and a[ai][j] == '*':  # и если сосед в рамках поля и это корабль
                    break      # тогда завершаем цикл
                aj = j + d     # адрес по столбцу слева или справа
                if 0 <= aj < m and a[i][aj] == '*':  # и если адрес в рамках поля и это корабль
                    break      # тогда завершаем цикл
            else:
                count += 1     # если не было найдено кораблей по периметру счётчик +1
print(count)

Даны числа n и m. Создайте массив A[n][m] и заполните его змейкой
0 1 2 3
7 6 5 4
8 9 10 11

n, m = map(int, input().split())    # ввод строки/стобцы
u = 0                   # счетчик

for i in range(n):      # цикл строка
    a = []              # список для строки
    for j in range(m):  # цикл столбцы в строке
        a.append(u)     # добавляем в список число
        u += 1          # к числу прибавляем +1
        
    # сразу же в этом цикле печатаем матрицу
    if i % 2 != 0:        # если не четная строка 
        a.reverse()       # переворачиваем список
    if i == 0:
        print(*a, sep=2*' ') # для 0 строки 2 пробела
    else:
        print(*a)
        

Маленького, но очень смелого мышонка Брейна не взяли в летнюю школу юных злодеев. Он расстроился и решил отодвинуть свои планы по захвату мира, а вместо этого податься в фотографы.

Как вам наверняка известно, самые крутые фотографии получаются на пленку (ведь тогда в хештегах можно указать #пленка).

Брейн наснимал очень много красочных фотографий на цветную и черно-белую пленки. Затем проявил и перевел их в цифровой вид. Но вот незадача! Теперь цветные и черно-белые фотографии лежат в одной папке, и, чтобы их рассортировать, нужно потратить не один час!

Так как Брейн теперь фотограф, а не программист, он просит вас помочь ему для одной фотографии определить, цветная она или черно-белая.

Фотография представляет собой матрицу размера n × m, в каждой ячейке которой хранится символ, обозначающий цвет соответствующего пикселя. Всего существует 6 цветов:
‘C’ (cyan) — голубой
‘M’ (magenta) — пурпурный
‘Y’ (yellow) — желтый
‘W’ (white) — белый
‘G’ (grey) — серый
‘B’ (black) — черный

Фотографию можно считать черно-белой, если в ней есть только белый, серый или черный цвет. Если же присутствует хоть один пиксель голубого, пурпурного или желтого цвета, она цветная.

n, m = map(int, input().split())    # ввод строки/стобцы
photo = [input().split() for _ in range(n)] # ввод матрицы

colors = ['C', 'M', 'Y', 'G']     # список цветных букв
flagColor = '#Black&White'        # флаг по умолчанию черно белый

for i in range(n):                # цикл по строке
    for j in range(m):            # цикл по столбцу
        if photo[i][j] in colors: # если элемент равен одному из эл-тов цветов
            flagColor ='#Color'   # флаг ставим цветной
            
print(flagColor)

Требуется вывести квадрат, состоящий из N×N клеток, заполненных числами от 1 до N2 по спирали (см. примеры).
Входные данные:
3
выходные данные:
1 2 3
8 9 4
7 6 5

n = int(input())           # ввод размера матрицы
a = []
for i in range(n):         # создание нулевой матрицы
    a.append([0] * n)
count = 1                  # счетчик
a[n // 2][n // 2] = n * n  # центральный элемент

for i in range(n // 2):             # определяем количество витков
    for j in range(i, n - i):       # идем по матрице вправо 
        a[i][j] = count
        count += 1
    for j in range(i + 1, n - i):   # идем по матрице вниз
        a[j][n-1-i] = count
        count += 1
    for j in range(n-2-i,-1+ i,-1): # идем по матрице влево
        a[n-1-i][j] = count
        count += 1
    for j in range(n-2-i,i,-1):     # идем по матрице вверх
        a[j][i] = count
        count += 1

# выводим матрицу
for i in a:
    print(*i)

Дан прямоугольный торт, который имеет вид таблицы размером r × c. Каждая ячейка таблицы содержит либо гадкую клубничку, либо является пустой. Например, торт размера 3 × 4 может выглядеть так:

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

Пожалуйста, выведите максимальное количество ячеек, которые может съесть Тортминатор.

Входные данные

Первая строка содержит два целых числа r и c (2 ≤ r, c ≤ 10), обозначающих количество строк и количество столбцов в торте. Следующие r строк содержат по c символов — j-ый символ i-ой строки обозначает содержимое ячейки в строке i и столбце j, и имеет одно из следующих значений:

символ ‘.’ обозначает ячейку торта без гадкой клубнички;

символ ‘S’ обозначает ячейку торта с гадкой клубничкой.

Выходные данные

Выведите максимальное количество ячеек торта, которые может съесть тортминатор

n,m = map(int, input().split())  # n -строки, m-столбцы
s = []                           # массива для ввода данных
for i in range(n):
    s.append(input())      # ввод исходных данных
    
count_strok = 0            # кол-во строк, где нет клубники
count_stolb = 0            # кол-во столбцов, где нет клубники

for i in range(n):         # сначала идем по строкам
    if 'S' not in s[i]:    # если в строке нет клубники
        count_strok += 1   # записываем в переменную +1
        
for i in range(m):         # цикл по столбцам
    s1 = []                # список для столбца
    for j in range(n):     # в столбце перебираем строки
        s1.append(s[j][i]) # и заноси в список
        
    if 'S' not in s1:      # если в новом списке(столбце) нет клубники
        count_stolb += 1   # записываем в переменную +1   
         
print(count_strok * m + count_stolb * (n - count_strok))
 # count_strok * m - Количество строк умножаю на количество элементов в этих строках(m).
 # count_stolb * (n - count_strok) - из кол-ва строк вычитается кол-во строк где нет клубники
 # и умножается на кол-во столбцов без клубники

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
nicknecknack
nicknecknack
8 месяцев назад

Заполнение соседямиДана прямоугольная матрица размером NxM, в которой заполнены значения только в первом столбце и в первом ряду. Все остальные элементы равны нулю и мы считаем их незаполненными.
Ваша задача заполнить каждый пустой элемент путем сложения соседа слева и соседа сверху. Начинать нужно с тех элементов, у которых оба указанных соседа заполнены (не равны нулю)
Входные данныеПрограмма сперва принимает в одной строке на вход два числа N и M — количество строк и столбцов в списке, а затем в N строках записаны элементы списка.
Выходные данныеВывести заполненную матрицу

size = list(map(int, input().split()))

triangle = [list(map(int, input().split())) for i in range(size[0])]

for i in range(1, size[0]):
  for j in range(1, size[1]):
    triangle[i][j] = triangle[i][j — 1] + triangle[i — 1][j]

for i in triangle:
  print(*i)

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x