Методическая разработка по информатике «Решение задач на 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 ЕГЭ...