Skip to content
This repository was archived by the owner on Apr 18, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@
Education
Алгоритмы и структуры данных на Python. Базовый курс. Учебные задания на портале GeekBrains.

**Lesson 1**
## **Lesson 1**

1. Найти сумму и произведение цифр трехзначного числа, которое вводит пользователь.
1. Найти сумму и произведение цифр трёхзначного числа, которое вводит пользователь.
2. Выполнить логические побитовые операции «И», «ИЛИ» и др. над числами 5 и 6. Выполнить над числом 5 побитовый сдвиг вправо и влево на два знака. Объяснить полученный результат.
3. По введенным пользователем координатам двух точек вывести уравнение прямой вида y=kx+b, проходящей через эти точки.
3. По введённым пользователем координатам двух точек вывести уравнение прямой вида y=kx+b, проходящей через эти точки.
4. Написать программу, которая генерирует в указанных пользователем границах:
случайное целое число;
случайное вещественное число;
случайный символ.
Для каждого из трех случаев пользователь задает свои границы диапазона. Например, если надо получить случайный символ от 'a' до 'f', то вводятся эти символы. Программа должна вывести на экран любой символ алфавита от 'a' до 'f' включительно.
Для каждого из трёх случаев пользователь задаёт свои границы диапазона. Например, если надо получить случайный символ от 'a' до 'f', то вводятся эти символы. Программа должна вывести на экран любой символ алфавита от 'a' до 'f' включительно.
5. Пользователь вводит две буквы. Определить, на каких местах алфавита они стоят и сколько между ними находится букв.
6. Пользователь вводит номер буквы в алфавите. Определить, какая это буква.
7. По длинам трех отрезков, введенных пользователем, определить возможность существования треугольника, составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он разносторонним, равнобедренным или равносторонним.
8. Определить, является ли год, который ввел пользователем, високосным или невисокосным.
7. По длинам трёх отрезков, введённых пользователем, определить возможность существования треугольника, составленного из этих отрезков. Если такой треугольник существует, то определить, является ли он разносторонним, равнобедренным или равносторонним.
8. Определить, является ли год, который ввёл пользователем, високосным или невисокосным.
9. Вводятся три разных числа. Найти, какое из них является средним (больше одного, но меньше другого).

**Lesson 2**
## **Lesson 2**

1. Написать программу, которая будет складывать, вычитать, умножать или делить два числа. Числа и знак операции вводятся пользователем. После выполнения вычисления программа не должна завершаться, а должна запрашивать новые данные для вычислений. Завершение программы должно выполняться при вводе символа '0' в качестве знака операции. Если пользователь вводит неверный знак (не '0', '+', '-', '*', '/'), то программа должна сообщать ему об ошибке и снова запрашивать знак операции. Также сообщать пользователю о невозможности деления на ноль, если он ввел 0 в качестве делителя.
2. Посчитать четные и нечетные цифры введенного натурального числа. Например, если введено число 34560, то у него 3 четные цифры (4, 6 и 0) и 2 нечетные (3 и 5).
Expand All @@ -29,3 +29,15 @@ Education
7. Напишите программу, доказывающую или проверяющую, что для множества натуральных чисел выполняется равенство: 1+2+...+n = n(n+1)/2, где n - любое натуральное число.
8. Посчитать, сколько раз встречается определенная цифра в введенной последовательности чисел. Количество вводимых чисел и цифра, которую необходимо посчитать, задаются вводом с клавиатуры.
9. Среди натуральных чисел, которые были введены, найти наибольшее по сумме цифр. Вывести на экран это число и сумму его цифр.

## **Lesson 3**

1. В диапазоне натуральных чисел от 2 до 99 определить, сколько из них кратны каждому из чисел в диапазоне от 2 до 9.
2. Во втором массиве сохранить индексы четных элементов первого массива. Например, если дан массив со значениями 8, 3, 15, 6, 4, 2, то во второй массив надо заполнить значениями 1, 4, 5, 6 (или 0, 3, 4, 5 - если индексация начинается с нуля), т.к. именно в этих позициях первого массива стоят четные числа.
3. В массиве случайных целых чисел поменять местами минимальный и максимальный элементы.
4. Определить, какое число в массиве встречается чаще всего.
5. В массиве найти максимальный отрицательный элемент. Вывести на экран его значение и позицию в массиве.
6. В одномерном массиве найти сумму элементов, находящихся между минимальным и максимальным элементами. Сами минимальный и максимальный элементы в сумму не включать.
7. В одномерном массиве целых чисел определить два наименьших элемента. Они могут быть как равны между собой (оба являться минимальными), так и различаться.
8. Матрица 5x4 заполняется вводом с клавиатуры кроме последних элементов строк. Программа должна вычислять сумму введенных элементов каждой строки и записывать в последнюю ячейку строки. В конце следует вывести полученную матрицу.
9. Найти максимальный элемент среди минимальных элементов столбцов матрицы.
12 changes: 12 additions & 0 deletions lesson-03/lesson-03_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'''1. В диапазоне натуральных чисел от 2 до 99 определить, сколько из них
кратны каждому из чисел в диапазоне от 2 до 9.'''

result = {}
for n in range(2, 10):
result[n] = []
for f in range(2, 100):
if f % n == 0:
result[n].append(f)
print(
f'Для числа {n} кратны - {len(result[n])}. Кратные числа: {result[n]}.'
)
17 changes: 17 additions & 0 deletions lesson-03/lesson-03_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'''2. Во втором массиве сохранить индексы чётных элементов первого
массива. Например, если дан массив со значениями 8, 3, 15, 6, 4, 2, то
во второй массив надо заполнить значениями 1, 4, 5, 6 (или 0, 3, 4, 5 -
если индексация начинается с нуля), т.к. именно в этих позициях первого
массива стоят чётные числа.'''

import random

r = [random.randint(0, 99) for _ in range(10)]
print(f'Первый массив {r}')
index_even = []

for n in r:
if n % 2 == 0:
index_even.append(r.index(n))

print(f'Индексы чётных элементов первого массива: {index_even}')
20 changes: 20 additions & 0 deletions lesson-03/lesson-03_3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'''3. В массиве случайных целых чисел поменять местами минимальный и
максимальный элементы.'''

import random

r = [random.randint(0, 99) for _ in range(10)]
print(f'Массив до изменения: {r}')

max = r[0]
min = r[0]

for i in r:
if i > max:
max = i
elif i < min:
min = i
min_index = r.index(min)
max_index = r.index(max)
r[min_index], r[max_index] = r[max_index], r[min_index]
print(f'Массив осле изменения элементов {min_index} и {max_index}: {r}')
13 changes: 13 additions & 0 deletions lesson-03/lesson-03_4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'''4. Определить, какое число в массиве встречается чаще всего.'''

import random

r = [random.randint(0, 99) for _ in range(100)]
print(f'Массив: {r}')

max_index = 0
for i in r:
if r.count(max_index) < r.count(i):
max_index = r.index(i)

print(f'Число {r[max_index]}, встречается {r.count(max_index)} раза')
19 changes: 19 additions & 0 deletions lesson-03/lesson-03_5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'''5. В массиве найти максимальный отрицательный элемент. Вывести на
экран его значение и позицию в массиве.'''

import random

r = [random.randint(-99, 99) for _ in range(100)]
print(f'Массив: {r}')

min_index = 0

for i in r:
if r[min_index] > i:
min_index = r.index(i)

if r[min_index] >= 0:
print(f'В массиве нет отрицательных элементов')
else:
print(f'В массиве минимальный отрицательный элемент: {r[min_index]}.',
f'Находится в массиве на позиции {min_index}')
31 changes: 31 additions & 0 deletions lesson-03/lesson-03_6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
'''6. В одномерном массиве найти сумму элементов, находящихся между
минимальным и максимальным элементами. Сами минимальный и максимальный
элементы в сумму не включать.'''

import random

r = [random.randint(0, 99) for _ in range(10)]
print(f'Массив: {r}')

min_index = 0
max_index = 0
step = 1
sum = 0

for i in r:
if r[min_index] > i:
min_index = r.index(i)
elif r[max_index] < i:
max_index = r.index(i)

if max_index - min_index < 0:
step = -1

for i in r[min_index + step:max_index:step]:
sum += i
# print(f'DEBUG i={i}')

print(
f'Сумма элементов между минимальным ({r[min_index]})',
f' и максимальным ({r[max_index]}) элементами: {sum}'
)
30 changes: 30 additions & 0 deletions lesson-03/lesson-03_7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
'''7. В одномерном массиве целых чисел определить два наименьших
элемента. Они могут быть как равны между собой (оба являться
минимальными), так и различаться.'''

import random

r = [random.randint(0, 99) for _ in range(100)]
print(f'Массив: {r}')

min_index_1 = 0
min_index_2 = 1

for i in r:
if r[min_index_1] > i:
min_index_2 = min_index_1
min_index_1 = r.index(i)
elif r[min_index_2] > i:
min_index_2 = r.index(i)

print(f'Два наименьших элемента: {r[min_index_1]} и {r[min_index_2]}')

'''Второй способ через сортировку списка'''

sort_list = []
sort_list.extend(r)
sort_list.sort()

print(
f'Два наименьших элемента (второй способ): {sort_list[0]} и {sort_list[1]}'
)
19 changes: 19 additions & 0 deletions lesson-03/lesson-03_8.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'''8. Матрица 5x4 заполняется вводом с клавиатуры кроме последних
элементов строк. Программа должна вычислять сумму введенных элементов
каждой строки и записывать в последнюю ячейку строки. В конце следует
вывести полученную матрицу.'''

matrix = []

for i in range(4):
matrix.append([])
sum = 0
for n in range(4):
user_number = int(input(f'Введите элемент {i+1} и {n+1} столбца: '))
sum += user_number
matrix[i].append(user_number)

matrix[i].append(sum)

for a in matrix:
print(('{:>4d}' * 5).format(*a))
33 changes: 33 additions & 0 deletions lesson-03/lesson-03_9.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'''9. Найти максимальный элемент среди минимальных элементов столбцов
матрицы.'''

import random

matrix = []

for i in range(15):
matrix.append([])
matrix[i].extend([random.randint(0, 99) for _ in range(15)])

min_list = []
min_list.extend(matrix[0])

for string in matrix:
print()
print(('{:4d} ' * len(string)).format(*string))
i = 0
for j in string:
if j < min_list[i]:
min_list[i] = j
i += 1

print()
print('min_list')
print(('{:4d} ' * len(min_list)).format(*min_list))
print()

min_list.sort(reverse=True)
print(
'Максимальный элемент среди минимальных элементов столбцов матрицы: ',
min_list[0]
)