Методическая разработка по информатике «Решение задач на Python »
методическая разработка по информатике и икт (9, 10, 11 класс)
Информационные технологии занимают все большее место в современном пространстве. А IT-специалисты являются крайне востребованными в различных сферах развития экономики и бизнеса. Все это обуславливает крайнюю актуальность развития навыков программирования. Данная методическая разработка представляет собой сборник задач, в которых используются переборные методы питона, задействованы продвинутые библиотеки, а следовательно, решение которых позволит сформировать и углубить икт-компетенции у школьников.
Скачать:
| Вложение | Размер |
|---|---|
| 415.26 КБ |
Предварительный просмотр:
Муниципальное бюджетное образовательное учреждение
«Средняя общеобразовательная школа №1 г. Анадыря»
Методическая разработка
по информатике
«Решение задач на Python »
Возраст детей: 11 класс
Автор: Лебедева Людмила Николаевна
г. Анадырь
2025 г.
Информационные технологии занимают все большее место в современном пространстве. А IT-специалисты являются крайне востребованными в различных сферах развития экономики и бизнеса. Все это обуславливает крайнюю актуальность развития навыков программирования. Данная методическая разработка представляет собой сборник задач, в которых используются переборные методы питона, задействованы продвинутые библиотеки, а следовательно, решение которых позволит сформировать и углубить икт-компетенции у школьников. Таким образом, данная методическая разработка является крайне актуальной и востребованной.
Целью данной разработки является повышение интереса учащихся к изучаемой дисциплине и развитие икт-компетенций в области программирования через решение задач.
Данная методическая разработка может быть использована как учебный материал для углубленного изучения языка программирования «питон», и может быть рекомендована к использованию учителями информатики при подготовке учащихся к единому государственному экзамену. С помощью представленной подборки задач учащиеся смогут применить теоретические знания на практике, построив сложные алгоритмы для решения задач.
- Задачи, решаемые методической разработкой:
- Знакомство с переборными методами, включая библиотеку itertools;
- Знакомство с графами;
- Знакомство со списками и использование их в циклах в тернарной форме записи; знакомство с функциями и динамическими методами программирования.
Формулировки задач взяты с различных учебных сайтов и решены вместе со старшеклассниками с использованием различных методов.
П.1. Решение задач на графы
Задача 1.
На рисунке схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта A в пункт B и из пункта E в пункт F. В ответе запишите целое число
Решение.
from itertools import *# вызывает библиотеку
dor='457 567 45 136 123 2477 126'.split()# создаем список дорог из таблицы
ver='af ab ad bg bc cd ce eg df fe'.split()# создаем список ребер из графа
print(*range(1,8))# распечатываем красиво
for perest in permutations('abcdefg'):# собираем все перестановки вершин
if all(str(perest.index(b)+1) in dor[perest.index(a)] for a,b in ver):# для каждой вершины проверяем соответствие
#все индексы, увеличенные на 1, так как индексация начинается с нуля и взятые в строковом формате, так это
# список строковых величин должны совпадать с индексами дорог для всех букв из списка вершин
# беру букву в перестановке, нахожу у нее индекс методом, т.е число,
# и проверяю, есть ли такой индекс в дорогах среди индексов
print(*perest)
Задача 2.
На рисунке схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта F в пункт A и из пункта D в пункт C.
В ответе запишите целое число.
from itertools import *
dor='457 457 567 45 136 123 247 126'.split()
ver='aа ab сe bc cd ge bg ef fa ad'.split()
print(*range(1,7))
for perest in permutations('abcdefg'):
if all(str(perest.index(b)+1) in dor[perest.index(a)] for a,b in ver):
print(*perest)
print('vse')
Задача 3.
На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта D в пункт A и из пункта B в пункт C. В ответе запишите целое число.
from itertools import *
dor='234 165 17 15 244 257 36'.split()
ver='ab ad ag bc bg cb dc gf fe de'.split()
print(*range(1,8))
for perest in permutations('abcdefg'):
if all(str(perest.index(y)+1) in dor[perest.index(x)] for x,y in ver):
print(*perest)
Задача 4
На рисунке схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова протяжённость дороги из пункта Д в пункт Е. В ответе запишите целое число – так, как оно указано в таблице.
from itertools import *
dor=['47', '57', '46', '137', '267', '235', '145']
ver='ав аб бд бг дг кв ке ве ед'.split()
print(*range(1,7))
for p in permutations( 'абвгдек'):
if all(str(p.index(y)+1) in dor[p.index(x)] for x,y in ver):
print(*p)
Задача 5
На рисунке справа схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта G в пункт F и из пункта A в пункт H.
В ответе запишите целое число.
Решение.
from itertools import *
dor='247 148 578 126 38 47 136 235'.split()
ver='ae ab ah bh ge ec fd fh fg gc cd '.split()
print(*range(1,8))
for perest in permutations('abcdefg'):
if all(str(perest.index(b)+1) in dor[perest.index(a)] for a,b in ver):
print(*perest)
print('vse')
Задача 6.
На рисунке схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта D в пункт G и из пункта A в пункт C.
Решение.
from itertools import *
dor='457 46 567 12 136 235 13'.split()
ver='ec ef fg gc gd df fe db ba ac '.split()
print(*range(1,7))
for perest in permutations('abcdefg'):
if all(str(perest.index(x)+1) in dor[perest.index(y)] for y,x in ver):
print(*perest)
Задача 7.
На рисунке схема дорог N-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта E в пункт B и из пункта D в пункт C.
В ответе запишите целое число.
Решение.
from itertools import*
dor='567 3457 26 124 134 12'.split()
ver='ab be ef ed dc cg gf'.split()
print(*range(1,10))
for perest in permutations('абвгдеклм'):
if all(str(perest.index(y)+1) in dor[perest.index(x)] for x,y in ver):
print(*perest)
Задача 8.
На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите длину пути из пункта Д в пункт Е. В ответе запишите целое число.
from itertools import *
dor=['24','146','56','1267','36','23457','46']
ver=['аб','ав','бв','ве','ек','кг','ед','дв','ге','гв']
print(*range(1,7))
for p in permutations('абвгдежик'):
if all(str(p.index(b)+1) in dor[p.index(a)] for a,b in ver):
print(*p)
# ответ 35
П.2 Решение задач на информационный объем
Задача 9.
Алексей написал генератор серии картинок в разрешении 4к (3840 x 2160) на 16 млн цветов, которые сохраняются без сжатия на 1TБ SSD для дальнейшего сжатия в видеопоток 60 FPS (Гц). Известно, что память TLC SSD не переживет 1000 циклов полной перезаписи. Посчитайте суммарное время всех сгенерируемых фрагментов видео за ожидаемое время жизни SSD. Ответ дайте в часах. Округляйте в меньшую сторону.
(1TБ у производителей неравен 1 Тебибайту, а равен 10**12 байт)
print(10**12*1000*8/(3840*2160*24*60*60*60))
Задача 10.
Ваня снимал видео в разрешении 3840 x 2160 пикселей с цветовой палитрой
# в x цветов и частотой 60 кадров в секунду. Звуковая дорожка записывалась
# в стерео формате с частотой дискретизации 48 кГц и глубиной кодирования
# 16 бит. Видео длилось 1,5 минуты и заняло 54691875 Кбайт. Найдите чему
# равно максимальное количество цветов в палитре, используемой Ваней при
# съёмке этого видео.
Решение.
for x in range(20):
if 3840*2160* x*60*90+48000*16*2*90 ==54691875*2**13:
break
print(2**x)
Задача 11.
# Токсичный информатик решил начать писать обучающие короткие видео. Он посчитал, что видео в среднем должно быть длиной 70 секунд. Видео планируется снимать в разрешении 1920 x 1080 пикселей с цветовой палитрой 16777216 цветов и частотой 30 кадров в секунду. Звуковая дорожка к видео будет записываться в квадро формате с частотой дискретизации 48кГц и глубиной кодирования 24 бит. Сколько видео сможет записать токсичный информатик, если он хочет, чтобы все видео поместили на одном жестком диске, на котором есть ровно 1 Тбайт.
Решение.
print(2**43//(70*1920*1080*24*30+4*48000*24*70))
Задача 12.
# Ваня разрабатывает свою собственную игру, в процессе создания игры он
# выяснил, что у него в игре будуи кат-сцены. Причем каждая из них будет
# представлять из себя видео в разрешении 1920 x 1080 пикселей с цветовой
# палитрой 2 **16 цветов и частотой 30 кадров в секунду. Звуковая дорожка к видео записывается в моно формате с частотой дискретизации 36 кГц и
# глубиной кодирования 16 бит. Ваня высчитал, что все кат-сцены суммарно
# занимают 5 минут. Найдите какое минимальное количество Мбайт понадобится для хранения всех кат-сцен без учёта заголовков. В ответе запишите целую часть числа.
Решение.
print((1920*1080*16*30*300+300*16*36000)//2**23)
Задача 13.
# Алексей написал генератор серии картинок в разрешении 4к (3840 x 2160)
# на 16 млн цветов, которые сохраняются без сжатия на 1TБ SSD для дальнейшего сжатия в видеопоток 60 FPS (Гц). Известно, что память TLC SSD не переживет 1000 циклов полной перезаписи. Посчитайте суммарное время всех сгенерируемых фрагментов видео за ожидаемое время жизни SSD. Ответ дайте в часах. Округляйте в меньшую сторону.
# (1TБ у производителей неравен 1 Тебибайту, а равен 10**12 байт)
Решение.
print(10**12*1000*8/(3840*2160*24*60*60*60))
п.3 Решение задач на преобразование по алгоритму.
Задача 14
for x in range(1,100):
n=bin(x)[2:]
if x%4==0:
r=n+n
else:
r=n+n[::-1]
if int(r,2)>=544:
print(x)
break
Задача 15.
def ch4(k):
ch=''
while k>0:
k,r=divmod(k,4) # перевожу в 4-ую систему счисления
ch=str(r)+ch
return ch# соблюдаем отступ
s=[]
for n in range(1,261):
ch=ch4 (n)
if n%4==0: # проверяю второе условие алгоритма
ch=ch+ch[-2:]
else: #если число не делится на 4, то снова запускаю перевод в четверичную
k=(n%4)*2
ch1=ch4(k) #задаю пустую переменную, так как иначе цикл бдет ругаться
ch=ch+ch1
t=int(ch,4) # перевожу из четверичной в десятичную
if t<261:
s.append(n) # если последнее условие выполнилось, то добавляю число в массив.
# если нужно вывести r, то просто добавлю его, а не n.
print(max(s))
Задача 16.
for n in range(1,101):
ob=bin(n)[2:]
l_n=len(ob)
if l_n%2==0:
ob=ob[:l_n//2]+'1'+ob[l_n//2:]
R=int(ob,2)
if R>=26:
print(n)
break
Задача 17.
# Исполнитель преобразует число на экране.
# У исполнителя есть три команды, которые обозначены буквами.
# A. Вычесть 1.
# B. Прибавить 3.
# C. Умножить на 2.
# Программа для исполнителя — это последовательность команд. Например, программа BAC при исходном числе 2 последовательно получит числа 5, 4, 8.
# Сколько существует программ, которые преобразуют исходное число 4 в число 14 и при
# этом не содержат двух команд A подряд?
Решение.
import sys
sys.setrecursionlimit(10**9)
def f(x, y, k):
if x > y:
return 0
if x == y:
return 1
else:
if k==1:
return f(x+3, y,k-1)+f(x*2,y,k-1)
else:
return f(x-1,y,k+1)+f(x+3, y,k)+f(x*2,y,k)
print(f(3,12,0))
# def f(x, y, k):
# if x > y+1:
# return 0
# if x == y:
# return 1
# else:
# if k == 1:
# return f(x + 3, y, k - 1) + f(x * 2, y, k - 1)
# else:
# return f(x - 1, y, k + 1) + f(x + 3, y, k) + f(x * 2, y, k)
# print(f(4, 14, 0))
П.4 Решение задач на адресацию в сети
Задача 18.
# Сколько адресов в сети, заданной адресом и маской '164.90.160.0/255.255.224.0', в которых количество единиц кратно 4?
Решение.
from ipaddress import *
k=0#счетчик. Считаем количество IP-адресов в данной сети
for x in ip_network('164.90.160.0/255.255.224.0'):#,0) - указываем 0,
#если просто IP через запятую в скобке) ip-network(сеть/маска)
# В маске можно просто указать количество единиц
# Если дан IP, то через запятую пишем параметр 0. ip-network(сеть/маска,0)
# На выходе получим сеть и кол-во единиц в маске
#Если задать f-строку, f'{x}', то можно вывести все IP-шники сети в 4-байтном представлении.
#Если задать f-строку, f'{x:b}', то выведутся все IP-шники в двоичном представлении
ip=f'{x}'
print(ip)
Задача 19.
#В сети, зданной адресом и маской ('10.112.0.0/255.248.0.0') найти к оличество адресов, в которых кол-во единиц кратно 3.
# Работает с 10 версии питона
Решение.
from ipaddress import *
cnt=0
adr=ip_network('10.112.0.0/255.248.0.0')
print(adr.network_address)
for x in ip_network('10.112.0.0/255.248.0.0'):
ip=f'{x:b}'
if ip.count('1')%3==0:
cnt+=1
print(cnt)
# 11001001.00001110.10011001.00010001
# 11111111.11111111.11111000.00000000
# 11001001.00001110.10011000.00000000
Задача 20.
from ipaddress import*
cnt=0
for x in ip_network('204.16.168.0/255.255.248.0',0):
adr=f'{x:b}'
if adr.count('1')%5==0:
cnt+=1
print(cnt)
#385 условие наоборот
П.5. Решение задач на обработку больших массивов данных
Задача 21.
def f(n):
s=set()
m=int(n**0.5+1)
for i in range(2,m+1):
if n%i==0:
s.add(i)
s.add(n//i)
# if len(s)>1:
# break
return sorted(s)
for x in range(110250000, 110300001):
ss=f(x)
if len(ss)>1:
M=ss[-1]+ss[-2]
#print(M)
if M%10000==1002:
print(x)
Задача 22.
# Среди натуральных чисел, не превышающих 10**10, найдите все числа,
# соответствующие маске 1?3616*7, делящиеся на 2023 без остатка.
# В ответе запишите найденное число, а затем через пробел результат
# деления этого числа на 2023. Числа вписывайте в порядке возрастания.
Решение.
from fnmatch import *
for x in range(0, 10**10+1,2023):
if fnmatch(str(x),'1?3616*7'):
print(x, x//2023)
Задача 23.
from fnmatch import *
cnt=0
for i in range(0,10**6+1,51):
if fnmatch(str(i),'12*45*'):
print(i,i//51)
if cnt==5:
break
# 122145 2395
# 122451 2401
# 124542 2442
# 124593 2443
# 127245 2495
Задача 24.
def f(n):
b=set()
i=2
while n>1 and i<=n:
# print(n,i)
while n%i==0:
n=n//i
b|={i}
# print(n,i)
i+=1
return sorted(b)
x= int(input('vvedite chislo'))
print(f(x))
Задача 25.
# Назовём нетривиальным делителем натурального числа его делитель,
# не равный единице и самому числу. Найдите все натуральные числа,
# принадлежащие отрезку [247264322; 369757523] и имеющие ровно три
# нетривиальных делителя. Для каждого найденного числа запишите в
# ответе само число и его наибольший нетривиальный делитель через
# пробел. Найденные числа расположите в порядке возрастания.
Решение.
def f(c):
return all(c%i!=0 for i in range (2,int(c**0.5)+1))
for x in range(int(247264322**0.25),int(369757523**0.25)+2):
if f(x)==1:
print(x**4,x**3)
# print(x, len(m))
Задача 26.
# Назовём нетривиальным делителем натурального числа его делитель,
# не равный единице и самому числу. Найдите все натуральные числа,
# принадлежащие отрезку [247264322; 369757523] и имеющие ровно три
# нетривиальных делителя. Для каждого найденного числа запишите в
# ответе само число и его наибольший нетривиальный делитель через
# пробел. Найденные числа расположите в порядке возрастания.
Решение.
def f(c):
return all(c%i!=0 for i in range (2,int(c**0.5)+1))
for x in range(int(247264322**0.25),int(369757523**0.25)+2):
if f(x)==1:
print(x**4,x**3)
# print(x, len(m))
Задача 27.
# from time import *
# d= time()
def f (x): return all(x%i!=0 for i in range(2,int(x**0.5)+1))
from fnmatch import *
a =[x**2 for x in range(int(10**4), int((2*10**8)**0.5+1)) if f(x) and fnmatch(str(x**2),'?*42*81')]
print(a)
b=[x for x in a if fnmatch(str(x),'?*42*81')]
print(a)
# c= time()
# print(c-d)
Задача 28.
def p(x):
return all(x%i!=0 for i in range(2, int(x**0.5)+1))
cnt=0
for x in range(int((113_000_000//2)*0.5)+1, int((114_000_000//2)*0.5)+1):
if p(x):
print(x**2*2, 2*x)
cnt+=1
if cnt==5:
break
Задача 29.
from fnmatch import *
for i in range(0, 10**10,12007):
if fnmatch(str(i),'9*?001?1'):
if str(i).count('9')<=2 and str(i).count('3')>0:
print(i,i//12007)
# 9098100131 757733
# 9201000121 766303
# 9303900111 774873
# 9406800101 783443
# 9681400191 806313
# 9784300181 814883
# 9887200171 823453
П.6 Решение задач теории игр. Тернарная запись.
Задача 30.
#2 кучи камней от 1 до 34. Игра заканчивается при 35 и выше. Ходы: +1, +3, *2
#19 Ваня выигрывает первым ходом
#20 Петя может выиграть вторым ходом
#Ваня может выиграть вторым ходом
#
def f(s, t, c, m):
if s+t>=231:return c%2==m%2
elif c==m:return 0
elif (c+1)%2==m%2:
return f(s+1,t, c+1, m) or f(s*2, t, c+1, m) or f(s,t+1, c+1, m) or f(s, t*2, c+1, m)
else:
# неудачный ход - это значит был выигрышный, но Петя его не заметил, то есть вместо и ставим или
return f(s+1, t, c+1, m) and f(s*2, t, c+1, m) and f(s,t+1, c+1, m) and f(s, t*2, c+1, m)
for s in range (1,230):
for c in range (1,5):
if f(s,17, 0, c)==1:
print(s, c)
Задача 31
# Дан список. Выведите те его элементы, которые встречаются в списке только один раз.
# Элементы нужно выводить в том порядке, в котором они встречаются в списке.
# В данной задаче запрещено пользоваться всеми операциями над списками (find, count, index и так далее).
a=[i for i in input().split()]
c=[]
for i in a:
if a.count(i)==1:
c.append(i)
print(' '.join(c))
Заключение.
Решение задач на питоне развивает не только учебные компетенции, но и различные метапредметные навыки, что является ценным результатом учебной деятельности. Основная цель изучения учебного предмета «Информатика» на углублённом уровне среднего общего образования – обеспечение дальнейшего развития информационных компетенций обучающегося, его готовности к жизни в условиях развивающегося информационного общества и возрастающей конкуренции на рынке труда. Данная методическая разработка работает на обеспечение сформированности понимания роли информатики, информационных и коммуникационных технологий в современном обществе; сформированность основ логического и алгоритмического мышления; сформированность умений различать факты и оценки, сравнивать оценочные выводы, видеть их связь с критериями оценивания и связь критериев с определённой системой ценностей, проверять на достоверность и обобщать информацию; создание условий для развития навыков учебной и творческой деятельности, мотивации обучающихся к саморазвитию.
По теме: методические разработки, презентации и конспекты

План-конспект урока информатики "Решение расчетных задач с помощью электронных таблиц"
Данный материал содержит подробный план-конспект урока по теме "Решение раччетных задач с помощью электронных таблиц" и презентацию к уроку.Цель урока: Формирование умений и навыков создания, редактир...

Урок информатики "Решение практических задач с помощью электронных таблиц"
Цель урока:обучающая – закрепить на практике полученные знания по использованию формул и функций в электронных таблицах, развивать интерес к решению задач;развивающая –- выбирать программное обеспечен...

Методическая разработка по информатике "Решение одной задачи" (ЕГЭ, 19 задание)
Методическая разработка решения одной задачи по информатике : задание 19 ЕГЭ...










