21 задача для мови Python

Про матеріал
Оригінальна збірка 21 задачі, яку можна використати для розв'язування в середовищі Python. Для складних задач є підказки та відповіді. Розв'язки демонструють компактність та модульність програм на мові Python. Дані задачі доповнюють та розширюють матеріали підручника інформатики 9 клас Бондаренко 2022. Як показує практика такі задачі викликають зацікавленість в учнів.
Перегляд файлу

21 задача*

 

  1. Вкажіть, які з наведених заголовків циклу for записані синтаксично правильно і роблять рівно 5 ітерацій?

 

------------------------------------------------------------------------------------------------------------------

2. Скільки всього кроків пройде Робот, виконавши наступний цикл?

 

for x in range (4):

    r.right (1)

    for y in range (4):

        r.right (2)

    r.right (3)

 

Зауважимо, що r.right (3) - це команда зсуву Робота на 3 кроки вправо.

------------------------------------------------------------------------------------------------------------------

3. Що виведе даний код ?

print (1,2,3. sep = ":")

------------------------------------------------------------------------------------------------------------------

4. Яке число буде виведено на екран? Спробуйте виконати це завдання, не запускаючи програму на Python.

N = 987654321

print(N % 10 ** 5 // 10 ** 2)

------------------------------------------------------------------------------------------------------------------

5. Що буде результатом операції

str ("1" + '2') * int (1 + 2)?

Будь ласка, дайте відповідь без використання інтерпретатора Python.

Якщо результат - рядок, то відповідь треба писати в лапках.

------------------------------------------------------------------------------------------------------------------

6. Яка з операцій змінює рядок s?

Будь ласка, дайте відповідь без використання інтерпретатора Python.

 

------------------------------------------------------------------------------------------------------------------

7. Знайдіть значення члена арифметичної прогресії з індексом тисячі п'ятсот сорок три(1543), якщо її нульовий член дорівнює 179, а крок дорівнює 2007.

 

Підказка. Другий параметр range можна просто покласти досить великим числом.

Для об'єкта range використовуйте операцію взяття елемента за індексом (номером): range (...) [...]

range(start, stop, step) [index]

------------------------------------------------------------------------------------------------------------------

8. За допомогою програми з циклом for обчисліть суму арифметичної прогресії:

1 + 3 + 5 + ... + 123456789.

 

Відповідь:

s = 0

for k in range(1, 123456790, 2):

    s = s + k

print(s)

------------------------------------------------------------------------------------------------------------------

9.

 

Відповідь:

n = 10 ** 9 + 13

d = 2

while n % d != 0:

    d += 1

print(d)

 

------------------------------------------------------------------------------------------------------------------

10. Обчисліть за допомогою мови Пітон факторіал числа 50 - добуток всіх натуральних чисел від 1 до 50.

------------------------------------------------------------------------------------------------------------------

11.Послідовність чисел генерується лямбда-функцією:

 

def generate_number ():

      return lambda random_seed: (random_seed * 693 + 5)% 100

number = generate_number ()

 

Член послідовності під номером i дорівнює number(i). Послідовність починається з першого елемента, ознака кінця послідовності - значення 0 (не входить в саму послідовність).

Знайти кількість чисел, кратних 7.

Відповідь:

def generate_number():

    return lambda random_seed: (random_seed*693 + 5)%100

n = generate_number()

k = 0

i = 1

while n(i) != 0:

    if n(i)%7 == 0:

         k += 1

    i += 1

print(k)

------------------------------------------------------------------------------------------------------------------

12.Послідовність чисел генерується лямбда-функцією:

 

def generate_number ():

     return lambda random_seed: (random_seed * 693 + 5)% 100

number = generate_number ()

 

Член послідовності під номером i дорівнює number (i). Послідовність починається з першого елемента, ознака кінця послідовності - значення 0 (не входить в саму послідовність).

Знайти суму чисел, кратних 7.

 

Відповідь:

 

def generate_number():

    return lambda random_seed: (random_seed*693 + 5)%100

n = generate_number()

s = 0

i = 1

while n(i) != 0:

    if n(i)%7 == 0:

        s += n(i)

    i += 1

print(s)

------------------------------------------------------------------------------------------------------------------

13. Послідовність чисел генерується функцією:

 

def number (random_seed):

     return (random_seed * 693 + 5)% 100

 

Член послідовності під номером i дорівнює number(i). Зверніть увагу на круглі дужки!

Послідовність починається з першого елемента, ознака кінця послідовності - значення 0 (не входить в саму послідовність).

Знайти середнє арифметичне чисел, кратних 4.

Відповідь:

 

def n(random_seed):

    return (random_seed*693 + 5)%100

 

k = 0

sum = 0

i = 1

while n(i) != 0:

    if n(i)%4 == 0:

        k += 1

        sum += n(i)

    i += 1

print(sum/k)

------------------------------------------------------------------------------------------------------------------

14.Послідовність чисел генерується лямбда-функцією:

 

def generate_number ():

     return lambda random_seed: (random_seed * 693 + 5)% 100

number = generate_number ()

 

Член послідовності під номером i дорівнює number (i). Послідовність починається з першого елемента, ознака кінця послідовності - значення 0 (не входить в саму послідовність).

Знайти мінімальне з чисел, кратне 3.

 

Відповідь:

def generate_number():

    return lambda random_seed: (random_seed*693 + 5)%100

n = generate_number()

 

i = 1

while n(i)%3 != 0:

    i += 1

minimum3 = n(i)

i += 1

while n(i) != 0:

     if n(i)%3 == 0:

         if n(i) < minimum3:

             minimum3 = n(i)

     i += 1

print(minimum3)

------------------------------------------------------------------------------------------------------------------

15. Дано список з 20 елементів, створений за допомогою

 

my_list = [(lambda x: (x * 87 + 12)% 16) (i) for i in range (20)]

 

Знайти кількість елементів, рівних мінімальному значенню, дістаючи з нього значення за допомогою операції

 

x = my_list.pop ()

 

і перевіряючи довжину, що залишилася  через len (my_list)

 

Довідка. Повертає елемент [на зазначеній позиції], видаляючи його зі списку.

list.pop ([i])

i = None: позиція шуканого елемента в списку (ціле число). Якщо не вказана, вважається що мається на увазі останній елемент списку. Від'ємні числа підтримуються.

 

Відповідь:

my_list = [(lambda x:(x*87+12)%16)(i) for i in range(20)]

print(my_list)

 

minv = my_list.pop()

minn = 1

while len(my_list) > 0:

    num = my_list.pop()

    if num < minv:

        minv = num

        minn = 1

    elif num == minv:

        minn += 1

print(minn)

------------------------------------------------------------------------------------------------------------------

16. Данo список з 2000 елементів, створений за допомогою

 

my_list = [(lambda x: (x * 296 + 2410)% 4096) (i) for i in range (2000)]

 

дістаючи з нього значення за допомогою операції

 

x = my_list.pop ()

 

і перевіряючи довжину залишився списку через  len (my_list),

знайти кількість елементів, рівних другому по мінімальності значенню (відмінних за значенням від першого мінімуму).

 

Відповідь:

# Варіант1

# генерируємо список із 2000 елементов

my_list = [(lambda x:(x*296+2410)%4096)(i) for i in range(2000)]

 

# початкове значення для тимчасового мінімума

min1_value = min2_value = 10000

min1_number = min2_number = 0

 

while my_list:

    x = my_list.pop()

    if x < min1_value:

        min2_value = min1_value

        min2_number = min1_number

        min1_value = x

        min1_number = 1

    elif x == min1_value:

        min1_number += 1

    elif x < min2_value:

        min2_value = x

        min2_number = 1

    elif x == min2_value:

        min2_number += 1

      

print(min2_number)

 

# Варіант 2

my_list = [(lambda x : (x*296+2410)%4096)(i) for i in range(2000)]

 

mine = min(my_list)

 

x = len(my_list)-1

while x>0:

    if mine == my_list[x]:

        my_list.pop(x)

    x -= 1

mine = min(my_list)

res = 0

while len(my_list)>0:

    if mine == my_list.pop():

        res += 1

print(res)

------------------------------------------------------------------------------------------------------------------

17. Дан список з 20 елементів, створений за допомогою

 

my_list = [(lambda x: (x * 87 + 12)% 100) (i) for i in range (20)]

 

дістаючи з нього значення за допомогою операції  x = my_list.pop ()

і перевіряючи довжину залишився списку через   len (my_list),

 

знайти середньоквадратичне відхилення за допомогою однопрохідного алгоритму. (Будьте уважні, "середньоквадратичне відхилення" і "стандартне відхилення" відрізняються один від одного.)

Введіть відповідь з точністю до п'ятого знака після коми.

 

Відповідь:

 

my_list = [(lambda x:(x*87+12)%100)(i) for i in range(20)]

 

summa = 0

summa2 = 0

k = 0

while len(my_list) > 0:

    x = my_list.pop()

    summa += x

    summa2 += x*x

    k += 1

sered = summa/k

sered2 = summa2/k

vidchil = (sered2 - sered**2)**0.5

print(vidchil)

------------------------------------------------------------------------------------------------------------------

18. Дан список з 20 елементів, створений за допомогою

 

my_list = [(lambda x: (x * 87 + 12)% 100) (i) for i in range (20)]

 

дістаючи з нього значення за допомогою операції  x = my_list.pop ()

 

і перевіряючи довжину залишився списку через  len (my_list),

 

знайти средньоквадратичну похибку середнього арифметичного за допомогою однопрохідного алгоритму за умови, що шукається середнє арифметичне парних чисел.

 

Введіть відповідь з точністю до другого знаку після коми. Округлення здійснюйте за правилами математики.

 

Відповідь:

 

my_list = [(lambda x:(x*87+12)%100)(i) for i in range(20)]

 

summa = 0

summa2 = 0

k = 0

while len(my_list) > 0:

    x = my_list.pop()

    if x%2 == 0:

        summa += x

        summa2 += x*x

        k += 1

sered = summa/k

sered2 = summa2/k

vidchul = (sered2 - sered**2)**0.5

print(vidchul)

------------------------------------------------------------------------------------------------------------------

19. Створіть послідовність A за допомогою наступного генератора:

 

def pseudo_list ():

    for i in range (N):

        yield (i * 9876 + 1024)% 1000

N = 10 ** 6 + 1

A = pseudo_list ())

 

# Елементи цієї послідовності слід перебирати так:

for x in A:

    pass   # робота з черговим числом x

Знайдіть «медіану» даного псевдосписка чисел за допомогою сортування підрахунком.

 

Медіана - це число, яке знаходиться рівно посередині списку, якщо список впорядкувати.

 

У послідовності чисел A - 10^6 + 1 число, всi числа - цілі невід'ємні від 0 до 999. Зберігати цю послідовність в список для подальшого сортування в даній задачі заборонено. Використовуйте сортування підрахунком.

 

Підказка.

Для кожного числа від 0 до 999 підрахуємо, скільки разів воно зустрічається в даному списку, причому зробимо це як в сортуванні підрахунком.

 

count = [0] * 1000

for elem in A:

     count [elem] + = 1

Для пошуку медіани не потрібно створювати відсортований масив, досить проаналізувати частоти. Виберемо таке число x, що загальна кількість появи чисел від 0 до x (включно) буде не менше, ніж 500000. Це число - відповідь на задачу.

 

 Відповідь:

 

def pseudo_list():

    for i in range(N):

        yield (i*9876+1024)%1000

N = 10**6 + 1

A = pseudo_list()

 

count = [0] * 1000

for x in A:

    count[x] += 1

 

x = 0

sum_count = count[0]

 

while sum_count <= N//2:

    x += 1

    sum_count += count[x]  

print(x)

---------------------------------------------------------------------------------------------------------------

20. Відсортувати слова в порядку лексикографічного зростання і як відповідь вивести слово, яке перебуває рівно посередині (медіану масиву). Кількість слів непарна.

Sam is a multi-file text editor based on structural regular expressions It was originally designed in the early 1980s at Bell Labs by Rob Pike with the help of Ken Thompson and other Unix developers for the Blit windowing terminal running on Unix it was later ported to other systems Sam follows a classical modular Unix aesthetic It is internally simple its power leveraged by the composability of a small command language and extensibility through shell integration

Відповідь:

Введення всіх слів рядка пишеться одним рядком:

words = input (). split ()

Як організувати сортування рядків?

Оскільки рядків трохи, можна скористатися будь-яким найпростішим алгоритмом сортування, наприклад, сортуванням вибором.

 

# Варіант 1

words = input(":").split()

N = len(words)

 

for p in range(N-1):

    for i in range(p+1, N):

        if words[i] < words[p]:

            words[i], words[p] = words[p], words[i]

           

print(words[N//2])

 

# Варіант2

words = input(":").split()

N = len(words)

words.sort()

print(words[N//2])

-----------------------------------------------------------------------------------------------------------

21. Обчисліть найбільший спільний дільник чисел 77164189341682084692124351766096496451364840671846455244761 і

 

46668734283684548617206823665104829826096872771679324943689.

 

Відповідь:

Скористаємось алгоритмом Евкліда:

 

# Варіант1

def gcd(a, b):  

    while b != 0:

        a, b = b, a % b

    return a

 

print(gcd(77164189341682084692124351766096496451364840671846455244761, 46668734283684548617206823665104829826096872771679324943689))

 

# Варіант2

 

a = 77164189341682084692124351766096496451364840671846455244761

b = 46668734283684548617206823665104829826096872771679324943689

 

while a != b:

    if a > b:

        a = a - b

    else:

        b = b - a

print(a)

===============================================================

docx
До підручника
Інформатика 9 клас (Бондаренко О.О., Ластовецький В.В., Пилипчук О.П., Шестопалов Є.А.)
Додано
22 листопада 2023
Переглядів
397
Оцінка розробки
Відгуки відсутні
Безкоштовний сертифікат
про публікацію авторської розробки
Щоб отримати, додайте розробку

Додати розробку