Python для восьмиклассников: алгоритмы и программы
Основы Python для восьмиклассников
Язык Python широко применяется в школьном курсе информатики. В 8 классе ученики знакомятся с базовыми конструкциями: переменными, вводом и выводом, условными операторами, циклами, списками и функциями. Рассмотрим типовую задачу – решение квадратного уравнения. Она позволяет закрепить работу с числами, ветвлениями и выводом результатов.
Как написать программу для решения квадратного уравнения с полным разбором всех случаев?
a = float(input('Введите коэффициент a: '))
b = float(input('Введите коэффициент b: '))
c = float(input('Введите коэффициент c: '))
if a == 0:
print('Это не квадратное уравнение (a = 0).')
else:
d = b**2 - 4*a*c
if d < 0:
print('Дискриминант отрицателен. Действительных корней нет.')
elif d == 0:
x = -b / (2*a)
print('Один корень (два одинаковых): x =', x)
else:
x1 = (-b + d**0.5) / (2*a)
x2 = (-b - d**0.5) / (2*a)
print('Корни: x1 =', x1, ', x2 =', x2)язык python информатика 8 класс (язык python в информатике 8 класса)
Пояснение шагов:
- Функция input() считывает строку, float() преобразует её в число с плавающей точкой.
- Проверка a == 0 отсекает случай, когда уравнение перестаёт быть квадратным.
- Вычисление дискриминанта по формуле d = b² – 4ac.
- Ветвление по знаку d определяет количество корней.
- Оператор **0.5 извлекает квадратный корень, для отрицательного d это вызовет ошибку, поэтому проверка d < 0 обязательна.
Типичные проблемы и их решение:
- ZeroDivisionError – если a = 0 и программа пытается делить на a. Решение: проверять a == 0 до вычислений.
- ValueError – если пользователь вводит не число (например, букву). Решение: обернуть ввод в try-except (см. вариант ниже).
- Ошибка логики – сравнение d == 0 вместо d < 0 и d > 0. Использовать elif для исчерпывающих условий.
Как оформить решение в виде функции для многократного использования?
def solve_quadratic(a, b, c):
if a == 0:
return 'Уравнение не является квадратным'
d = b**2 - 4*a*c
if d < 0:
return 'Корней нет'
elif d == 0:
return -b / (2*a)
else:
return (-b + d**0.5) / (2*a), (-b - d**0.5) / (2*a)
# Пример вызова
a, b, c = 1, -3, 2
result = solve_quadratic(a, b, c)
print('Результат:', result)
Функция возвращает кортеж из двух корней, одно значение или строку. Такой подход облегчает тестирование и повторное использование кода.
Как защитить программу от некорректного ввода?
def safe_float_input(prompt):
while True:
try:
value = float(input(prompt))
return value
except ValueError:
print('Ошибка: введите число, а не текст.')
a = safe_float_input('Введите a: ')
b = safe_float_input('Введите b: ')
c = safe_float_input('Введите c: ')
# Далее код решения
Цикл while повторяет запрос до тех пор, пока пользователь не введёт корректное число. Конструкция try-except перехватывает ошибку преобразования и выводит подсказку.
Как использовать модуль math для корня?
import math
# после вычисления d
d = b**2 - 4*a*c
if d >= 0:
sqrt_d = math.sqrt(d)
# остальные вычисления
Модуль math предоставляет функцию sqrt, которая работает быстрее и читается легче, чем **0.5. Однако при отрицательном d возникнет ValueError, поэтому проверка d >= 0 обязательна.
Дополнительные примеры программ на Python
Пример 1: Вычисление факториала с помощью рекурсии и цикла
# Рекурсивная функция
def fact_rec(n):
if n == 0:
return 1
return n * fact_rec(n-1)
# Циклический вариант
def fact_loop(n):
result = 1
for i in range(2, n+1):
result *= i
return result
n = 5
print('Факториал', n, 'рекурсивно:', fact_rec(n))
print('Факториал', n, 'циклом:', fact_loop(n))
Факториал 5 рекурсивно: 120 Факториал 5 циклом: 120
Рекурсия наглядна, но может вызвать переполнение стека при больших n. Цикл эффективнее. Обе функции проверяют базовый случай n=0.
Пример 2: Поиск минимального и максимального элемента в списке оценок
grades = [4, 5, 3, 2, 5, 4, 4]
min_grade = grades[0]
max_grade = grades[0]
for g in grades:
if g < min_grade:
min_grade = g
if g > max_grade:
max_grade = g
print('Оценки:', grades)
print('Минимальная:', min_grade)
print('Максимальная:', max_grade)
print('Средняя:', sum(grades)/len(grades))
Оценки: [4, 5, 3, 2, 5, 4, 4] Минимальная: 2 Максимальная: 5 Средняя: 3.857142857142857
Встроенные функции min(), max(), sum() упрощают код, но ручной перебор полезен для понимания алгоритмов.
Пример 3: Шифр Цезаря для строки
def caesar(text, shift):
result = ''
for char in text:
if char.isalpha():
start = ord('a') if char.islower() else ord('A')
shifted = (ord(char) - start + shift) % 26 + start
result += chr(shifted)
else:
result += char
return result
original = 'Hello, World!'
encrypted = caesar(original, 3)
decrypted = caesar(encrypted, -3)
print('Исходное:', original)
print('Зашифрованное:', encrypted)
print('Расшифрованное:', decrypted)
Исходное: Hello, World! Зашифрованное: Khoor, Zruog! Расшифрованное: Hello, World!
Функция обрабатывает только буквы, сохраняя регистр и знаки препинания. Сдвиг может быть любым целым числом, отрицательное значение используется для дешифровки.
Пример 4: Чтение чисел из текстового файла и вывод суммы
# Содержимое файла numbers.txt:
# 12 45 67
# 8 23 91
# 34 56
with open('numbers.txt', 'r') as f:
total = 0
for line in f:
numbers = line.split()
for num in numbers:
total += int(num)
print('Сумма чисел из файла:', total)
Сумма чисел из файла: 336
Метод split() разбивает строку по пробелам. Для больших файлов лучше использовать with, который гарантирует закрытие файла. При неверном формате данных (буквы вместо цифр) возникнет ValueError, поэтому стоит добавить обработку исключений.