Решение задач на Python: практикум для девятого класса
Разбор типовых задач Python для 9 класса
Задачи по программированию на Python в 9 классе часто проверяют умение работать с циклами, условиями, списками и строками. Ниже приведены несколько распространенных заданий с вариантами решений.
Как проверить, является ли число простым, за минимальное количество операций?
Наиболее эффективный способ - проверить делители от 2 до корня из числа. Если ни один делитель не найден, число простое.
import math
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(math.isqrt(n)) + 1):
if n % i == 0:
return False
return True
# Пример использования
print(is_prime(17)) # True
print(is_prime(1)) # Falseяндекс задания python (задания от яндекса по python)
Пояснение: функция math.isqrt возвращает целый квадратный корень. Перебираем только до этого значения, что сокращает время для больших чисел.
Как проверить простоту с помощью цикла for и else?
В Python можно использовать блок else после for, который выполняется, если цикл не был прерван break.
def is_prime_v2(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
print('Найден делитель', i)
break
else:
return True
return False
print(is_prime_v2(29)) # TruePython разработчик тестовые задания (примеры тестовых заданий python)
Этот вариант более наглядный, но менее эффективен из-за использования n**0.5 с плавающей точкой.
Как найти все простые числа до заданного N быстрее?
Для нахождения всех простых чисел до N используется решето Эратосфена.
def sieve_of_eratosthenes(n):
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n**0.5) + 1):
if is_prime[i]:
for j in range(i*i, n+1, i):
is_prime[j] = False
return [i for i, prime in enumerate(is_prime) if prime]
print(sieve_of_eratosthenes(30)) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
егэ python задачи (задачи егэ по python)
Этот метод особенно полезен при решении задач, где требуется список простых чисел для дальнейших операций.
Какие ошибки возникают при проверке простоты?
- Ввод отрицательных чисел и единицы - они не являются простыми, программа должна это учитывать.
- Неверный диапазон делителей - если проверять до самого числа, время резко возрастает.
- Использование float при извлечении корня - может привести к неточности для больших чисел (лучше применять math.isqrt).
Как посчитать, сколько раз каждый символ встречается в строке?
Самый простой и быстрый способ - использовать словарь. Проходим по строке и увеличиваем счетчик.
def char_frequency(s):
freq = {}
for ch in s:
freq[ch] = freq.get(ch, 0) + 1
return freq
text = 'hello world'
result = char_frequency(text)
print(result)
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}программы python егэ (программы для егэ по python)
Метод get возвращает текущее значение или 0, если ключа нет.
Как воспользоваться встроенным счетчиком из collections?
from collections import Counter
text = 'hello world'
counter = Counter(text)
print(counter)
# Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})решу егэ python (решение заданий егэ по python)
Counter - это подкласс словаря, специально предназначенный для подсчета.
Как учесть только буквы без учета регистра?
Преобразуем строку к нижнему регистру и проверяем, является ли символ буквой.
import string
def char_frequency_letters(s):
s = s.lower()
freq = {}
for ch in s:
if ch in string.ascii_lowercase:
freq[ch] = freq.get(ch, 0) + 1
return freq
print(char_frequency_letters('Hello, World!'))
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1}Типичные проблемы при подсчете символов
- Разделение пробелов и знаков препинания - если нужны только буквы, необходимо фильтровать.
- Учет регистра - по умолчанию 'A' и 'a' считаются разными символами.
- Память при больших строках - словарь растет пропорционально числу уникальных символов.
Расширенные примеры с нестандартными подходами
Генерация всех перестановок строки с помощью itertools
import itertools
def all_permutations(s):
return [''.join(p) for p in itertools.permutations(s)]
print(all_permutations('ABC'))
# ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']Результат: ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
Проверка сбалансированности скобок с помощью стека
def is_balanced(expr):
stack = []
pairs = {')': '(', '}': '{', ']': '['}
for ch in expr:
if ch in pairs.values():
stack.append(ch)
elif ch in pairs:
if not stack or stack.pop() != pairs[ch]:
return False
return not stack
tests = ['()', '({[]})', '({)}', '((())']
for t in tests:
print(f'{t:10} -> {is_balanced(t)}')() -> True
({[]}) -> True
({)} -> False
((()) -> FalseНахождение НОД с помощью алгоритма Евклида
def gcd(a, b):
while b:
a, b = b, a % b
return a
print(gcd(48, 18)) # 6
print(gcd(100, 25)) # 256 25
Сортировка списка строк по длине с помощью лямбда-функции
words = ['apple', 'kiwi', 'banana', 'pear', 'grape']
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)
# ['kiwi', 'pear', 'apple', 'grape', 'banana']['kiwi', 'pear', 'apple', 'grape', 'banana']