Решение модуля 5.6 Добрый, добрый Python

Модуль 5.6 Вложенные циклы.

Вводится натуральное число N (то есть, положительное, целое). Требуется создать двумерный (вложенный) список размером N x N элементов, состоящий из всех единиц, а затем, в последний столбец записать пятерки. Вывести этот список на экран в виде таблицы чисел, как показано в примере ниже.

P.S. Будьте внимательны в конце строк пробелов быть не должно!

N = int(input())                 # Ввод натурального числа с клавиатуры
a =  [[1] * N for i in range(N)] # Задаём N списков с N единицами
b = a[0]                         # Создаём список [1, 1, 1, 1]  (один список)
b[-1] = 5                        # Делаем так что бы появились пятёрки
while N != 0:                    # ( Это что бы вывелось несколько раз, а также личное творество ученика ;) ) 
    print(*b)                    # Сам вывод N раз
    N -= 1                       # А это что бы цикл не был бесконечным

Вводится список из URL-адресов (каждый с новой строки). Требуется в них заменить все пробелы на символ дефиса (-). Следует учесть, что может быть несколько подряд идущих пробелов. Результат преобразования вывести на экран в виде строк из URL-адресов.

P. S. Для считывания списка целиком в программе уже записаны начальные строчки.

import sys
# lst_in = ['django chto  eto takoe    poryadok ustanovki', 'model mtv   marshrutizaciya funkcii  predstavleniya', 'marshrutizaciya  obrabotka isklyucheniy       zaprosov perenapravleniya' ]

# Cчитывание списка из входного потока
lst_in = list(map(str.strip, sys.stdin.readlines()))

# здесь продолжайте программу (используйте список lst_in)
for string_word in lst_in:               # Перебираю позиции в списке    
    while '  ' in string_word:           # Прохожу циклом пока в строке встречается двойной пробел
        string_word = string_word.replace('  ', ' ')  # Заменяю двойные пробелы на одинарные
    print(string_word.replace(' ','-'))  # Вывожу результат заменяя все пробел на -

 Вводится натуральное число n. Необходимо найти все простые числа, которые меньше этого числа n, то есть, в диапазоне [2; n). Результат вывести на экран в строчку через пробел.

n = int(input())            
nums = list(range(n))            # создаем список из всех чисел до n
nums[1] = 0                      # так как 1 не является простым числом, обнуляем ее
i = 2                            # заводим переменную цикла равную 2

while i < n ** 0.5:              # устанавливаем границу итерации цикла до квадратного корня из n, дальше проходить по циклу нет смысла
    if nums[i] != 0:             # если i != 0, то это простое число
        j = i ** 2               # с помощью переменной j находим все числа, кратные i и 
        # обнуляем их, так как они не являются простыми
        while j < n:             
            nums[j] = 0
            j += i
    i += 1
nums = [num for num in nums if num != 0]    # создаем список без нулей
print(*nums)

Вводится двумерный список размерностью 5 х 5 элементов, состоящий из нулей и, в некоторых позициях, единиц (см. пример ввода ниже). Требуется проверить, не касаются ли единицы друг друга по горизонтали, вертикали и диагонали. То есть, вокруг каждой единицы должны быть нули. Если проверка проходит вывести ДА, иначе — НЕТ.

P. S. Для считывания списка целиком в программе уже записаны начальные строчки.

import sys

# считывание списка из входного потока
s = sys.stdin.readlines()
lst_in = [list(map(int, x.strip().split())) for x in s]

# здесь продолжайте программу (используйте список lst_in)
string_matrix = len(lst_in[0])
flag = True

lst_in = [[0]*string_matrix] + (lst_in) + [[0]*string_matrix] # Добавляем строки вверх и вниз матрицы
for i in range(len(lst_in)): # Добавляем столбцы
    lst_in[i].insert(0, 0) # Первый столбец матрицы
    lst_in[i].append(0) # Последний столбец матрицы

for index_str, value in enumerate(lst_in): # Прохожу по строкам и сохраняю данные в переменную value, индексы index_str
    if flag == True: # Ставлю флаг в True
        for index_positon, value_str in enumerate(value): # Ставлю флаг в True
            if value_str == 1: # Если встречаю 1 в матрице начинаю проверять на соприкосновение с другими единицами
                if (lst_in[index_str][index_positon + 1] == 1 or lst_in[index_str][index_positon - 1] == 1):# Слева или справа
                    flag = False
                    break
                if 1 in lst_in[index_str - 1][index_positon - 1: index_positon +1]: # Верхний ряд
                    flag = False
                    break
                if 1 in lst_in[index_str + 1][index_positon - 1: index_positon +1]: # Нижний ряд
                    flag = False
                    break
                    # Случае нахождения прерываю поиск, flag ставлю в False
                else:
                    flag = True # Иначе flag = True
    else:
        break  # Если флаг в положение False прерываю поиск.


if flag: 
    print("ДА")
else:
    print("НЕТ")

Вводится двумерный список размерностью 5 х 5 элементов, состоящий из целых чисел (пример ввода см. ниже). Проверьте, является ли этот двумерный список симметричным относительно главной диагонали. Главная диагональ — та, которая идёт из левого верхнего угла двумерного массива в правый нижний. Выведите на экран ДА, если матрица симметрична и НЕТ — в противном случае.

P. S. Для считывания списка целиком в программе уже записаны начальные строчки.

import sys

# считывание списка из входного потока
s = sys.stdin.readlines()
lst_in = [list(map(int, x.strip().split())) for x in s]

# здесь продолжайте программу (используйте список lst_in)
flag = True # Создаю флаг
count = 1 # Счетчик для начала второго индекса

# for index, value in enumerate(lst_in): # Для отрисовки матрицы
#     print(value)
# for index_1, value_1 in enumerate(lst_in):

for index_1 in range(0, len(lst_in)): # Получения первой части индекса (Основной список)
    for index_2 in range(count, len(lst_in)): # Получения второй части индекса (Вложенный список)
        # if lst_in[index_1][index_2] != lst_in[index_2][index_1]: # Сокращенный вариант проверки
        number_1 = lst_in[index_1][index_2] # Сохраняю число из массива стоящее слева
        number_2 = lst_in[index_2][index_1] # Сохраняю число из массива стоящее справа
        if number_1 != number_2: # Проверяю их на неравенство
            flag = False # Если они не равный то условия нашего задания не исполняются и можно выходить из цикла flag = False
            break   # Прерываю работу цикла с помощью break
        else: # Если равны то устанавливаю флаг на True и продолжаю проверку
            flag = True

    if flag == False: # Если Флаг равен False то выхожу из внешнего цикла
        break

if flag: # Если Флаг равен True то печатаю ДА
    print("ДА")
else:   # Если Флаг равен False то печатаю НЕТ
    print("НЕТ")

Вводится список целых чисел в одну строку через пробел. Необходимо выполнить его сортировку выбором по возрастанию (неубыванию). Идея алгоритма очень проста и проиллюстрирована на рисунке ниже.

Решение модуля 5.6 Добрый, добрый Python

Вначале мы рассматриваем первый элемент списка и ищем второй минимальный относительно первого элемента (включая и его). На рисунке — это последний элемент со значением -1. Затем, меняем местами первый и последний элементы. Переходим ко второму элементу списка и повторяем эту же процедуру, но относительно второго элемента (то есть, первый уже не рассматриваем). На рисунке минимальный элемент — это 2, поэтому менять местами здесь ничего не нужно. Переходим к 3-му элементы со значением 6. Относительно него находим минимальный элемент — это 3. Меняем их местами. 

Вот идея алгоритма сортировки выбором. Реализуйте его для вводимого списка целых чисел. Результат выведите в виде списка чисел одну строку через пробел.

number_lst = list(map(int, input().split())) # Записываю данные в список
count = 1 # Создаю счётчик для того чтобы повторно не повторять уже обработанные индексы
#print(number_lst)

for index_1 in range(0, len(number_lst)):          # Беру первое число
    for index_2 in range(count, len(number_lst)):  # Беру второе число
        number_1 = number_lst[index_1]             # Сохраняю первое число
        number_2 = number_lst[index_2]             # Сохраняю второе число
        # Сравнение можно было производить if number_lst[index_1] > [index_2]
        if number_1 > number_2:                    # Если number_1 меньше number_2
            number_mid = number_lst[index_1]       # Сохраняю первое число в промежуточную переменную
            number_lst[index_1] = number_lst[index_2] # Заменяю число в списке на меньшее
            number_lst[index_2] = number_mid       # Переставляю большее число для дальнейшей проверки
            # number_lst[index_1], number_lst[index_2] = number_lst[index_2], number_lst[index_1] # Короткий способ замены значений
    count += 1         # Увеличиваю счетчик на 1 при каждой итерации чтобы не проверять уже замененные значения

print(*number_lst)     # Вывожу результат в консоль

Вводится список целых чисел в одну строку через пробел. Необходимо выполнить его сортировку по возрастанию (неубыванию) методом всплывающего пузырька. Идея алгоритма проста и показана на рисунке ниже.

Решение модуля 5.6 Добрый, добрый Python

При первом проходе перебираем все соседние пары элементов и если значение предыдущего элемента (слева) больше значения следующего (справа), то они меняются местами. (На рисунке 3 и 2 меняются местами). Следующая пара — это 3 и 6. Они уже выстроены по возрастанию, поэтому ничего не делаем и переходим к следующей паре 6 и -1. Меняем значения местами и видим, что на последнем месте находится максимальное значение 6, что нам и нужно.

При втором проходе делаем все то же самое, но доходим до предпоследнего элемента, так как последнее значение 6 уже отсортировано. На третьем проходе исключаем уже последние два элемента и так далее. То есть, в этом алгоритме достаточно сделать N-1 проходов, где N — длина списка.

Вот идея алгоритма сортировки всплывающего пузырька. Реализуйте его для вводимого списка целых чисел. Результат выведите в виде списка чисел одну строку через пробел.

number_lst = list(map(int, input().split()))  # Записываю данные в список
count = 0   # Создаю счетчик чтоб проверять два рядом стоящих числа

for index in range(0, len(number_lst)):       # Это цикл задает число проходов по списку
    count = 0                                 # Каждую новую итерация я обнуляю счетчик для прохода с 0 элемента цикла
    for index_2 in range(1, len(number_lst)): # Каждую новую итерация я обнуляю счетчик для прохода с 0 элемента цикла
        # number_1 = number_lst[count]        # Сохраняю первое число
        # number_2 = number_lst[index_2]      # Сохраняю второе число
        # if number_1 > number_2:  # Если number_1 меньше number_2
        if number_lst[count] > number_lst[index_2]: # Если первое значение больше второго 
            number_lst[count], number_lst[index_2] = number_lst[index_2], number_lst[count] # Меняем значения местами
        count += 1     # Увеличиваю счетчик на 1 при каждой итерации чтобы не проверять уже замененные значения

print(*number_lst)     # Вывожу результат в консоль

В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Вводится натуральное число n. Как наименьшим количеством таких денежных купюр можно выплатить сумму n? Вывести на экран список купюр для формирования суммы n (в одну строчку через пробел, начиная с наибольшей и заканчивая наименьшей). Предполагается, что имеется достаточно большое количество купюр всех достоинств.

n = int(input())
while n != 0: 
    for i in range(6, -1, -1):      # идём в цикле от 2 ** 6 степени (64) до 2 ** 0 (1) 
        while n >= 2 ** i:          # Пока n больше n ** i не переступаем в следующей цифры
            n -= 2 ** i             # вычитаем 2 ** i
            print(2 ** i, end=' ')  # печатаем 2 ** I и так по кругу. Если n не больше 2 ** i, то переходим к следующей цифре. Уже 2 ** 5

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

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

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