Перейти к содержимому

Програмування на Python

Шукайте свої завдання з пошуку, оскільки нормальних назв у них немає


  1. Необхідно обчислити, скільки банок фарби потрібно, щоб зафарбувати поверхню бака циліндричної форми. Пофарбувати треба і зовні, і зсередини. Користувач вводить діаметр та висоту бака, а також яку площу можна пофарбувати однією банкою фарби.
import math
def paint(D:float,H:float,S:float)->int:
    return math.ceil(2*D*math.pi*H/S)


if __name__=="__main__":
    K = paint(float(input("Введите диаметр бака: ")),
          float(input("Введите высоту бака: ")),
          float(input("Введите прощадь, которую можно покрасить одной банкой: "))
    )
    print(f"Вам нужно {K} банок краски для покраски бака снаружи и изнутри")

  1. Обчислити тривалість року на двох планетах за введеними радіусами їх орбіт і швидкості руху по орбітах. З’ясувати, чи правда, що рік на першому планеті довший, ніж на другому. Тривалість року обчислюється за формулою (2*радіус_орбіти*пі/орбітальна_швидкість).
import math
def year_length(R:float,v:float) -> float:
    return 2*R*math.pi/v


if __name__ == "__main__":
    print("Введите параметры первой планеты")
    p1 = year_length(float(input("Введите радиус первой планеты: ")),
                float(input("Введите орбитальную скорость первой планеты: ")))
    print("Введите параметры второй планеты")
    p2 = year_length(float(input("Введите радиус второй планеты: ")),
                     float(input("Введите орбитальную скорость второй планеты: ")))

    print(f"Длительность года на первой планете {p1}, а на второй {p2}")
    if p1 > p2:
        print("Год на первой планете дольше чем на второй")
    else:
        print("Год на второй планете дольше чем на первой")

  1. Згенерувати випадкові цілі та речові числа, символ в межах діапазонів, які вводить користувач. У мові програмування Python у модулі random є однойменна функція, яка генерує речове число від 0 до 1. Якщо помножити отримане таким чином випадкове число на довжину діапазону, то отримаємо число від 0 до кінця довжини діапазону. Якщо далі додати мінімальну межу діапазону, то відбудеться зміщення та буде отримано випадкове число від мінімального кордону до максимального. Відмінність отримання цілого числа від речовинного у тому, що у першому випадку, якщо максимальна межа входить у діапазон, треба додати 1 до довжини діапазону і після множення перетворити на ціле, відкинувши дробову частина. Випадковий символ отримують за тією самою формулою, що ціле. Символи «перетворять» до цілих, отримують випадкове число і далі «перетворюють» його на символ.
from random import random
import math

def isint(S: str) -> bool:
    try:
        int(S)
        return True
    except:
        return False


def isfloat(S: str) -> bool:
    try:
        float(S)
        return True
    except:
        return False


def rand(start, end):
    if isint(start) and isint(end):
        start = int(start)
        end = int(end)+1
        return start+math.floor((end-start)*random())
    elif isfloat(start) and isfloat(end):
        start = int(start)
        end = int(end)
        return start+(end-start)*random()
    else:
        start = ord(start)
        end = ord(end)+1
        return chr(start+math.floor((end-start)*random()))


if __name__ == "__main__":
    Start = input("Введите начало диапазона: ")
    End = input("Введите конец диапазона: ")
    print(rand(Start,End))

  1. Необхідно визначити індекси елементів списку, значення яких не менше заданого мінімуму і не більше заданого максимуму. Нехай досліджуваний масив (список Python) заповнюється випадковими числами в діапазоні від 0 до 99 (включно) і складається з 100 елементів. Далі мінімум і максимум для пошуку значень задається користувачем.
from random import randint

if __name__ == "__main__":
    lst = [randint(0, 100) for i in range(100)]
    min_ch = int(input("Введите нижнюю границу интервала: "))
    max_ch = int(input("Введите верхнюю границу интервала: "))
    print("Массив чисел:")
    print(lst)
    ind = [i for i, x in enumerate(lst) if min_ch <= x <= max_ch]
    print(f"Индексы чисел входящих в интервал {min_ch}-{max_ch}:")
    print(ind)

  1. У матриці замінити останній елемент кожного рядка на суму попередніх елементів того ж рядка. Алгоритм вирішення основної частини завдання (тільки додавання та заміна): Для кожного рядка присвоїти змінній summa значення 0, індекс елемента (i) також значення 0. Поки індекс елемента не дійшов до останнього елемента рядка, збільшувати значення summa на значення чергового елемента рядка матриці. Інакше (коли індекс елемента вказує на останній елемент рядка) змінити значення останнього елемента рядка значення змінної summa.
if __name__ == "__main__":
    lst = [[1,2,3,4],
           [5,2,9,5],
           [8,4,3,3],
           [0,6,5,8]]
    print("Матрица до изменений:")
    print(lst)
    lst = [i[:-1]+[sum(i[:-1])] for i in lst]
    print("Матрица после изменений:")
    print(lst)

  1. Допустимо, у нас є список чисел, з якого треба видалити елементи, що задовольняють певну умову. Будемо видаляти зі списку, що складається з 20 чисел в діапазоні від 0 до 100, всі елементи, які більше 35 і менше 65. При цьому числа, що видаляються, збережемо в іншому списку. У Python за допомогою інструкції del можна видалити елемент списку, вказавши сам список та індекс елемента, що видаляється.
if __name__ == "__main__":
    lst = list(randint(0, 101) for i in range(20))
    print("Изначальный список:")
    print(lst)

    lst_del = [x for x in lst if 35 < x < 65]
    [lst.pop(i) for i, x in enumerate(lst) if 35 < x < 65]
    print("Список удаленных чисел:")
    print(lst_del)
    print("Измененный список")
    print(lst)

  1. Знайти суми елементів стовпців матриці та відсортувати стовпці матриці за зростанням знайдених сум.
def transpose(lst: list)->list:
    return list(map(list, zip(*lst)))


if __name__ == "__main__":
    lst = [[10, 2, 3, 4],
           [5, 7, 5, 5],
           [8, 4, 3, 3],
           [11, 6, 5, 8]]

    sorted_lst = transpose(sorted(transpose(lst), key=sum))
    print("Матрица до сортировки:")
    print(lst)
    print("Матрица после сортировки:")
    print(sorted_lst)

  1. Вводяться цілі числа. Необхідно парні додавати на початок списку, а непарні — до кінця
if __name__ == "__main__":
    print("Вводите целые числа, цепочка оканчивается 0(enter после каждого введенного):")
    temp = int(input())
    lst=[]
    while temp!=0:
        if temp%2==0:
            lst = [temp]+lst
        else:
            lst.append(temp)
        temp = int(input())
    print("Ваш список:")
    print(lst)

  1. Вводиться рядок. Необхідно визначити у ній відсотки великих та малих букв
if __name__ == "__main__":
    input_str = input("Введите строку: ")
    l = len([c for c in input_str if c.islower()])
    u = len([c for c in input_str if c.isupper()])
    print(f"Процент маленьких букв: {l / len(input_str)*100}%")
    print(f"Процент больших букв: {u / len(input_str)*100}%")

10.Припустимо, дано рядок слів, розділених пробілами. Необхідно знайти у ній найдовше слово і замінити у ньому букви ‘a’ на букви ‘b’.

if __name__ == "__main__":
    input_str = input("Введите строку: ")
    word = max(input_str.split(), key=len)
    input_str = input_str.replace(word, word.replace("a", "b"))
    print("Строка с заменой: ", input_str)

11.У рядку замінити пробільні символи знаком зірочки («*«). Якщо зустрічається поспіль кілька прогалин, їх слід замінити одним знаком ««, пробіли на початку і в кінці рядка видалити.

if __name__ == "__main__":
    input_str = input("Введите строку: ")
    reformat_str = "*".join(input_str.strip().split())
    print("Рефотматированная строка:",reformat_str)

12.Дано рядок, що містить натуральні числа та слова. Необхідно сформувати список із чисел, що містяться в цьому рядку.

if __name__ == "__main__":
    input_str = input("Введите строку: ")
    input_str = input_str.strip().split()
    ints = list(map(int, [x for x in input_str if x.isdigit()]))
    print("Числа в строке:", ints)

13.Знайти найменше загальне кратне (НОК) пар чисел за формулою НОК = ab / НОД (a, b), де a і b – це натуральні числа, НОД – найбільший спільний дільник.

import math

if __name__ == "__main__":
    print("Введите два числа: ",end="")
    a, b = map(int,input().split())
    nok = a*b//math.gcd(a,b)
    print(f"Нок чисел {a} и {b} равен {nok}")

14.Дано кілька списків із різною кількістю елементів у кожному. Для кожного списку знайти максимум і розділити всі елементи цього списку

#Если честно, задание не особо понял... Но, думаю, разделить на максимум
def normalize(lst: list)->list:
    norm_el = max(lst)
    return [x/norm_el for x in lst]

if __name__ == "__main__":
    lst1 = list(map(int, input("Введите первый список: ").split()))
    lst2 = list(map(int, input("Введите второй список: ").split()))
    print("Первый список после деления:",normalize(lst1))
    print("Второй список после деления:", normalize(lst2))

15.Виконати циклічне зрушення у списку цілих чисел так, щоб на початку виявився мінімальний елемент. Зсув також може бути кільцевим, тобто. елемент, що вийшов за межі списку, повинен з’являтися з іншого кінця.

from operator import itemgetter

def vert(lst: list, n: int) -> list:  # Цикличный сдвиг на n шагов
    n = n % len(lst)
    return lst[n:]+lst[:n]


if __name__ == "__main__":
    lst = list(map(int, input("Введите список: ").split()))

#Находим индекс минимального элемента и сдвигаем
    lst_sdv = vert(lst, min(enumerate(lst), key=itemgetter(1))[0]) 
    print("Повернутый список:", lst_sdv)