Методическая разработка по информатике «Решение задач на Python »
методическая разработка по информатике и икт (9, 10, 11 класс)

Лебедева Людмила Николаевна

Информационные технологии занимают все большее место в современном пространстве. А IT-специалисты являются крайне востребованными в различных сферах развития экономики и бизнеса. Все это обуславливает крайнюю актуальность развития навыков программирования. Данная методическая разработка представляет собой сборник задач, в которых используются переборные методы питона, задействованы продвинутые библиотеки, а следовательно, решение которых позволит сформировать и углубить икт-компетенции у школьников. 

Скачать:

ВложениеРазмер
Файл reshenie_zadach_na_piton.docx415.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.

На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

https://kompege.ru/images/6033.png

Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта 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-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

https://kompege.ru/images/14241.png

Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова протяжённость дороги из пункта Д в пункт Е. В ответе запишите целое число – так, как оно указано в таблице.

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-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

https://kompege.ru/images/17965.jpg

Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта 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-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

https://kompege.ru/images/17855.png

Так как таблицу и схему рисовали независимо друг от друга, нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта 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-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

https://kompege.ru/images/17800.png

Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова сумма протяжённостей дорог из пункта 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.

На рисунке схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о протяжённости каждой из этих дорог (в километрах).

https://kompege.ru/images/25.png

Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите длину пути из пункта Д в пункт Е. В ответе запишите целое число. 

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 ЕГЭ...

Элективный курс по информатике "Решение нестандартных задач по информатике"

Программа данного элективного курса (курса по выбору обучающихся) ориентирована на систематизацию знаний и уме­ний по курсу информатики  для подготовки к сдаче единого государственного экзаме...