Книга программиста/Задачи на Python 3

Материал из Викиучебника — открытых книг для открытого мира

К оглавлению | Назад | Вперёд

Все программы, код которых выложен здесь, являются работоспособными.

Простые задачи[править]

Бинарный поиск[править]

import math, random

def BinarySeach(a, x, l, r):
	def NewMiddle():
	   return math.ceil((l + r)/2)
	
	m = NewMiddle()
	while l <= r:
		if a[m] == x:
			print('Элемент {0} был найден в позиции {1}.'.format(x, m))
			return x
		elif x > a[m]:
			l = m + 1
			m = NewMiddle()
		else:
			r = m - 1
			m = NewMiddle()
	print('Не обнаружено элемента со значением {0}.'.format(x))

N = 10

L = list()

for i in range(0, N):
	L.append(random.randint(0, 10))

L.sort()
print(L)

BinarySeach(L, 4, 0, N - 1)

Смотрите также: реализация на PascalABC.Net

Список с максимумом максимумов[править]

L = max([[1, 2, 3], [4, 5, 6]], key = max)
print(L)
print('Индекс максимального элемента {0} равен {1}.'.format(max(L), L.index(max(L))))

Смотрите также: реализация на PascalABC.Net

Задачи К. Полякова[править]

==Стандартные функции==Kuan-Kek Определим следующие функции для решения задач:

# Выполняет чтение списка целых чисел с клавиатуры.Kuan-Kek
def ReadListInteger(n):
  L = []
  for i in range(0, n):
    L.append(int(input()))
  return L

# Выполняет чтение списка вещественных чисел с клавиатуры. Kuan-Kek
def ReadListFloat(n):
  L = []
  for i in range(0, n):
    L.append(float(input()))
  return L

# Выполняет чтение списка строк с клавиатуры.Kuan-Kek
def ReadListString(n):
  L = []
  for i in range(0, n):
    L.append(input())
  return L

def ToWords(s):
  return ' '.join(s.split())

def MinBy(l, f):
  return min(filter(lambda x: f(x), l))

def MaxBy(l, f):
  return max(filter(lambda x: f(x), l))

Удаление лишних пробелов в строках массива[править]

def ReadListString(n):
  L = []
  for i in range(0, n):
    L.append(input())
  return L

def ToWords(s):
  return ' '.join(s.split())

print(list(map(lambda x: ToWords(x), ReadListString(2))))

Используемые функции

Смотрите также: реализация на PascalABC.Net.

Задача 1[править]

Дан массив, содержащий 2014 положительных целых чисел. Напишите на одном из языков программирования программу, которая находит в этом массиве количество локальных минимумов. Локальным минимумом называется элемент массива, который меньше всех своих соседей. Например, в массиве из 6 элементов, содержащем числа 4, 6, 12, 7, 3, 8, есть два локальных минимума: это элементы, равные 4 и 3. Программа должна вывести общее количество подходящих элементов, значения элементов выводить не нужно. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.

N = 2014

L = list()
K = 0

for i in range(N):
	L.append(int(input()))

if L[0] < L[1]:
	K += 1

if L[N - 2] > L[N - 1]:
	K += 1

for i in range(1, N - 1):
	if L[i - 1] > L[i] and L[i] < L[i + 1]:
		K += 1

print(K)

Смотрите также: реализация на PascalABC.Net.

Задача 2[править]

Дан массив, содержащий неотрицательные целые числа, не превышающие 10 000. Необходимо вывести:

  1. минимальный чётный элемент, если количество чётных элементов не больше, чем нечётных;
  2. минимальный нечётный элемент, если количество нечётных элементов меньше, чем чётных.

Например, для массива из шести элементов, равных соответственно 4, 6, 12, 17, 9, 8, ответом будет 9 – наименьшее нечётное число, поскольку нечётных чисел в этом массиве меньше.

MaxValue = 100000000

N = 20

L = list()
C1, C2 = 0, 0
Min1, Min2 = MaxValue, MaxValue

for i in range(0, N):
	L.append(int(input()))
	if L[i]%2 == 0:
		C1 += 1
		if L[i] < Min1:
			Min1 = L[i]
	else:
		C2 += 1
		if L[i] < Min2:
			Min2 = L[i]

if C1 <= C2:
	print(Min1)
else:
	print(Min2)
def ReadListString(n):
  L = []
  for i in range(0, n):
    L.append(input())
  return L
 
def MinBy(l, f):
  return min(filter(lambda x: f(x), l))
 
L = ReadListString(20)
EvenCount = len(list(filter(lambda x: x%2 == 0, L)))
if EvenCount <= len(L) - EvenCount:
  print(MinBy(L, lambda x: x%2 == 0))
else:
  print(MinBy(L, lambda x: x%2 != 0))

Используемые функции

Смотрите также: реализация на PascalABC.Net.

Задача 3[править]

Дан целочисленный массив из 2000 элементов. Если сумма всех элементов массива чётная, нужно вывести количество нечётных (по значению) элементов массива, если нечётная – количество чётных. Например, для массива из 6 элементов, равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 2 – количество нечётных элементов, так как общая сумма всех элементов чётна.

N = 2000

L = list()
S = 0
K1, K2 = 0, 0

for i in range(N):
	L.append(int(input()))
	S += L[i]
	if L[i]%2 == 0:
		K1 += 1
	else:
		K2 += 1

if S%2 == 0:
	print(K2)
else:
	print(K1)
def ReadListInteger(n):
  L = []
  for i in range(0, n):
    L.append(int(input()))
  return L

L = ReadListInteger(20)
if sum(L)%2 == 0:
  print(len(filter(lambda x: x%2 != 0, L)))
else:
  print(len(filter(lambda x: x%2 == 0, L)))

Используемые функции

Смотрите также: реализация на PascalABC.Net.

Задача 4[править]

Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива.

N = 20

L = list()
K = 0

for i in range(N):
	L.append(int(input()))

for i in range(N - 1):
	if L[i]%3 == 0 or L[i + 1]%3 == 0:
		K += 1

print(K)

Смотрите также: реализация на PascalABC.Net.

Задача 5[править]

Дан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых десятичная запись хотя бы одного числа оканчивается на 5.

N = 40

L = list()
K = 0

for i in range(N):
	L.append(int(input()))

for i in range(N):
	for j in range(i + 1, N):
		if L[i]%10 == 5 or L[j]%10 == 5:
			K += 1

print(K)

Смотрите также: реализация на PascalABC.Net.

Математические задачи[править]

Задача о принадлежности точки кольцу[править]

import math

R1, R2 = float(input()), float(input())
X, Y = float(input()), float(input())

if R1 > R2:
  R1, R2 = R2, R1

D = math.sqrt(X**2 + Y**2)
if D > R1 and D < R2:
  print('Точка внутри кольца.')
else:
  print('Точка вне кольца.')

Смотрите также: реализация на PascalABC.Net.

Задача о решении уравнений[править]

import math

A, B, C = float(input()), float(input()), float(input())
D = B**2 - 4*A*C
if D >= 0:
  d2 = math.sqrt(D)
  a2 = 2*A
  X1 = (-B + d2)/a2
  X2 = (-B + d2)/a2
  if X1 == X2:
    print('Найден один корень, равный {0}'.format(X1))
  else:
    print('Найдены два корня, равные {0} и {1}'.format(X1, X2))
else:
  print('Ошибка нахождения корней: недопустимое значение {0} для D (< 0).'.format(D))

Смотрите также: реализация на PascalABC.Net.