Всем привет:) Продолжаю разбирать задачи с собеседований, небольшие по объему но в то же время позволяющие повторить некоторые разделы. Это будет полезно как для начинающих так и для опытных программистов как повторение и возможность похвастаться более красивым кодом) Скажу сразу что не претендую на "идеальный код" так пытаюсь максимально сделать свой код понятным и чтобы мне было легко его расписывать. Возможно оно и лучше:) так как у более опытных программистов тут будет возможность поправить меня, опубликовать свою версию кода и получить плюсы:) а новичкам возможность посмотреть на различные решения одной и той же задачи. Если статья вам понравится можете поддержать меня и поставить плюс:) также пишите ваши вопросы и предложения в комментарии, постараюсь всем ответить. Посмотрим условие задачи:)
Напишите программу, которая выведет первые N простых чисел
Комментарий если прогуливали уроки математики: Простое число - число которое делится само на себя и на единицу (имеет 2 общих делителя).
Какие знания для решения требует эта задача? Ответ: Понимание как устроены вложенные циклы и умение работать со списками.
Приступим к решению задачи, как и в прошлой статье разберем варианты решения как с функцией так и без функции.
Так как конечное число не указано то запросим у пользователя ввод числа до которого будем выводить простые числа. Удобный пользовательский интерфейс так сказать:)
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
Значение получили. Пусть для примера пользователь хочет вывести первые 10 чисел. Дальше нам нужно создать пустой список, в него мы будем складывать все простые числа которые будем находить.
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
numbers = [] # список, в который будем вносить простые числа
Все:) данные получили, списки создали, теперь начнем искать числа:)
Для этого создадим цикл for от 2 до (n + 1), в нем будем перебирать все делители. Заметим что единица не является простым числом
ответ: ошибка на единицу:) более подробно написано тут
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
numbers = [] # список, в который будем вносить простые числа
for i in range(2, n+1): # заводим цикл от 2 до (n + 1)
Договоримся что все отступы в коде буду обозначать как " > > "
Теперь создадим вложенный цикл, в нем уже будем перебирать все числа и проверять каждое на наличие делителей.
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
numbers = [] # список, в который будем вносить простые числа
for i in range(2, n+1): # заводим цикл от 2 до (n + 1)
> > for j in range(2, i): # переменная цикла j - проверяемое число на наличие делителей
Итак, главный залог успеха в решении любой задачи: умение представить алгоритм решения. Как мы поймем что число i делится на число j? Ответ как всегда на поверхности: остаток от числа должен быть равен нулю. В Python есть оператор % который позволяет найти остаток от деления. Применим в нашем коде этот оператор.
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
numbers = [] # список, в который будем вносить простые числа
for i in range(2, n+1): # заводим цикл от 2 до (n + 1)
> > for j in range(2, i): # переменная цикла j - проверяемое число на наличие делителей
> > > > if (i % j) == 0 # условие проверки деления без остатка
Далее, если условие выполняется то пропускаем это число командой break, также для первого цикла применим оператор Else который означает что мы нашли простое число.
numbers.append(i) - команда добавления числа в наш ранее созданный пустой список.
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
numbers = [] # список, в который будем вносить простые числа
for i in range(2, n+1): # заводим цикл от 2 до (n + 1)
> > for j in range(2, i): # переменная цикла j - проверяемое число на наличие делителей
> > > > if (i % j) == 0: # условие проверки деления без остатка
> > > > > > break
> > else:
> > > > numbers.append(i) #добавляем простое число в список
Все! задача практически решена, осталось вывести список на печать! Не забудем применить * для распаковки списка. (уберет квадратные скобки)
n = int(input("Введите n: ")) # "int" преобразует введенное пользователем значение в число
numbers = [] # список, в который будем вносить простые числа
for i in range(2, n+1): # заводим цикл от 2 до (n + 1)
> > for j in range(2, i): # переменная цикла j - проверяемое число на наличие делителей
> > > > if (i % j) == 0: # условие проверки деления без остатка
> > > > > > break
> > else:
> > > > numbers.append(i) #добавляем простое число в список
print(*numbers) # печатаем распакованный с помощью команды "*" список
Рассмотрим эту же задачу с упаковкой кода в функцию
Первоначально необходимо объявить функцию (для новичков: сначала пишем функцию а потом делаем к ней запрос иначе - NameError)
def simple(num): # определяем функцию simple
Наша функция будет принимать число num и возвращать True если num является простым числом, и False в противном случае.
Далее код остается без изменений
def simple(num): # определяем функцию simple
> > for i in range(2, num): # цикл for для перебора всех чисел от 2 до num
> > > > if num % i == 0: # условие проверки деления без остатка
> > > > > > return False # Если num делится на какое-либо из этих чисел без остатка
> > > >return True # в противном случае
С функцией разобрались, перейдем к остальному коду. Также создадим список, в который будем вносить все найденные числа.
def simple(num): # определяем функцию simple
> > for i in range(2, num): # цикл for для перебора всех чисел от 2 до num
> > > > if num % i == 0: # условие проверки деления без остатка
> > > > > > return False # Если num делится на какое-либо из этих чисел без остатка
> > > >return True # в противном случае
simple_numbers = []
Прописываем первоначальное значение проверяемых цифр index = 1 (дабы исключить единицу) и запускаем цикл.
def simple(num): # определяем функцию simple
> > for i in range(2, num): # цикл for для перебора всех чисел от 2 до num
> > > > if num % i == 0: # условие проверки деления без остатка
> > > > > > return False # Если num делится на какое-либо из этих чисел без остатка
> > > >return True # в противном случае
simple_numbers = []
index = 1 # первоначальное значение проверяемого числа
for i in range (1, n): #запускаем цикл
> > index += 1 # стартовая цифра 2
Далее проверяем является ли число простым используя функцию simple (как мы помним возвращает True или False) Если значение True то выполняется условие if если False то игнорируем.
def simple(num): # определяем функцию simple
> > for i in range(2, num): # цикл for для перебора всех чисел от 2 до num
> > > > if num % i == 0: # условие проверки деления без остатка
> > > > > > return False # Если num делится на какое-либо из этих чисел без остатка
> > > >return True # в противном случае
simple_numbers = []
index = 1 # первоначальное значение проверяемого числа
for i in range (1, n): #запускаем цикл
> > index += 1 # стартовая цифра 2
> > if simple(index): # прописываем условие
> > > > simple_numbers.append(index) # если удовлетворяет то добавляем в список
Все выполнено! Осталось только вывести распакованный список на печать.
def simple(num): # определяем функцию simple
> > for i in range(2, num): # цикл for для перебора всех чисел от 2 до num
> > > > if num % i == 0: # условие проверки деления без остатка
> > > > > > return False # Если num делится на какое-либо из этих чисел без остатка
> > > >return True # в противном случае
simple_numbers = []
index = 1 # первоначальное значение проверяемого числа
for i in range (1, n): #запускаем цикл
> > index += 1 # стартовая цифра 2
> > if simple(index): # прописываем условие
> > > > simple_numbers.append(index) # если удовлетворяет то добавляем в список
print(*simple_numbers) # распаковываем список и выводим на печать
Ниже для наглядности прикреплю картинку с готовым кодом:
Также можете посмотреть код в онлайн интерпретаторе - тык
Мой канал по python: https://t.me/python_scrypt (полезная инфа, обзор библиотек)
Если статья информативная то прошу поддержать плюсом) всем спасибо за просмотр!)