Модуль 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("НЕТ")
Вводится список целых чисел в одну строку через пробел. Необходимо выполнить его сортировку выбором по возрастанию (неубыванию). Идея алгоритма очень проста и проиллюстрирована на рисунке ниже.
Вначале мы рассматриваем первый элемент списка и ищем второй минимальный относительно первого элемента (включая и его). На рисунке — это последний элемент со значением -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) # Вывожу результат в консоль
Вводится список целых чисел в одну строку через пробел. Необходимо выполнить его сортировку по возрастанию (неубыванию) методом всплывающего пузырька. Идея алгоритма проста и показана на рисунке ниже.
При первом проходе перебираем все соседние пары элементов и если значение предыдущего элемента (слева) больше значения следующего (справа), то они меняются местами. (На рисунке 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
Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы