Към съдържанието
wannacode

Задачи

Тук са задачите на курса на едно място. Първо 50 самостоятелни задачи от „Здравей, свят“ до най-кратък път в матрица, всяка с пример и решение на Python, проверено с истински компилатор. После задачите от уроците, по модули: всяка води към урока, където е обяснено нужното.

50 задачи за упражнение

  1. 1. Hello World

    Изпиши на конзолата текста Hello, World! – програмата няма вход.

    Без вход.

    Изход
    Hello, World!

    Нужното е в урока: Първата програма

    Решение
    print("Hello, World!")
  2. 2. Поздрави потребителя

    Прочети име от един ред и поздрави човека по име във вида „Здравей, <име>!“.

    Вход
    Мария
    Изход
    Здравей, Мария!

    Нужното е в урока: Вход и изход

    Решение
    name = input()
    print("Здравей, " + name + "!")
  3. 3. Изписване на възраст

    Прочети възрастта на потребителя (цяло число), запази я в променлива и я изпиши в изречение.

    Вход
    17
    Изход
    Ти си на 17 години.

    Нужното е в урока: Променливи и типове

    Решение
    age = int(input())
    print("Ти си на " + str(age) + " години.")
  4. 4. Конвертор на единици

    Прочети дължина в инчове (може да е дробно число) и я преобразувай в сантиметри: 1 инч = 2.54 см. Изпиши резултата с 2 знака след точката.

    Вход
    12.5
    Изход
    31.75 см

    Нужното е в урока: Оператори и аритметика

    Решение
    inches = float(input())
    print(f"{inches * 2.54:.2f} см")
  5. 5. Проверка за четност

    Прочети цяло число и изпиши дали е четно, или нечетно.

    Вход
    7
    Изход
    7 е нечетно.

    Нужното е в урока: Условия

    Решение
    number = int(input())
    if number % 2 == 0:
    print(str(number) + " е четно.")
    else:
    print(str(number) + " е нечетно.")
  6. 6. Сума на числа

    Прочети две цели числа, всяко на отделен ред, и изпиши сумата им.

    Вход
    12
    30
    Изход
    Сумата е 42.

    Нужното е в урока: Оператори и аритметика

    Решение
    first = int(input())
    second = int(input())
    print("Сумата е " + str(first + second) + ".")
  7. 7. Площ на квадрат

    Прочети страната на квадрат (цяло число) и изпиши лицето му.

    Вход
    5
    Изход
    Лицето е 25.

    Нужното е в урока: Оператори и аритметика

    Решение
    side = int(input())
    print("Лицето е " + str(side * side) + ".")
  8. 8. Обем на сфера

    Прочети радиуса r (може да е дробно число) и изпиши обема на сферата V = 4/3 · π · r³ с 2 знака след точката.

    Вход
    3
    Изход
    Обемът е 113.10.

    Нужното е в урока: Оператори и аритметика

    Решение
    import math
    r = float(input())
    volume = 4 / 3 * math.pi * r ** 3
    print(f"Обемът е {volume:.2f}.")
  9. 9. Сравнение на числа

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

    Вход
    8
    15
    Изход
    По-голямото е 15.

    Нужното е в урока: Условия

    Решение
    a = int(input())
    b = int(input())
    if a > b:
    print("По-голямото е " + str(a) + ".")
    else:
    print("По-голямото е " + str(b) + ".")
  10. 10. Проверка за триъгълник

    Прочети три цели числа, всяко на отделен ред, и провери дали могат да са страни на триъгълник: сборът на всеки две трябва да е по-голям от третото.

    Вход
    3
    4
    5
    Изход
    Могат да образуват триъгълник.

    Нужното е в урока: Условия

    Решение
    a = int(input())
    b = int(input())
    c = int(input())
    if a + b > c and a + c > b and b + c > a:
    print("Могат да образуват триъгълник.")
    else:
    print("Не могат да образуват триъгълник.")
  11. 11. Класификация по оценка

    Прочети оценка от 2 до 6 (може да е дробна) и изпиши словом: от 5.50 – Отличен, от 4.50 – Много добър, от 3.50 – Добър, от 3.00 – Среден, под 3.00 – Слаб.

    Вход
    4.75
    Изход
    Много добър

    Нужното е в урока: Условия

    Решение
    grade = float(input())
    if grade >= 5.5:
    print("Отличен")
    elif grade >= 4.5:
    print("Много добър")
    elif grade >= 3.5:
    print("Добър")
    elif grade >= 3:
    print("Среден")
    else:
    print("Слаб")
  12. 12. Конвертиране на време

    Прочети брой часове (цяло число) и изпиши колко секунди са.

    Вход
    2
    Изход
    7200 секунди

    Нужното е в урока: Оператори и аритметика

    Решение
    hours = int(input())
    print(str(hours * 3600) + " секунди")
  13. 13. Изброяване до N

    Прочети цяло число N и изпиши числата от 1 до N, всяко на нов ред.

    Вход
    5
    Изход
    1
    2
    3
    4
    5

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    for i in range(1, n + 1):
    print(i)
  14. 14. ASCII стойност

    Прочети един символ (първия символ на реда) и изпиши неговия ASCII код, тоест числото, с което компютърът го пази.

    Вход
    A
    Изход
    Кодът на A е 65.

    Нужното е в урока: Низове: работа с текст

    Решение
    symbol = input()[0]
    print("Кодът на " + symbol + " е " + str(ord(symbol)) + ".")
  15. 15. Квадратно уравнение

    Прочети a, b и c, всяко на отделен ред, и реши уравнението ax² + bx + c = 0. При два корена изпиши „x1 = …, x2 = …“ (x1 е с +√D), при един – „x = …“, с 2 знака след точката; ако корени няма или a е 0, кажи го.

    Вход
    1
    -3
    2
    Изход
    x1 = 2.00, x2 = 1.00

    Нужното е в урока: Условия

    Решение
    import math
    a = float(input())
    b = float(input())
    c = float(input())
    if a == 0:
    print("Това не е квадратно уравнение")
    else:
    d = b * b - 4 * a * c
    if d > 0:
    x1 = (-b + math.sqrt(d)) / (2 * a)
    x2 = (-b - math.sqrt(d)) / (2 * a)
    print(f"x1 = {x1:.2f}, x2 = {x2:.2f}")
    elif d == 0:
    print(f"x = {-b / (2 * a):.2f}")
    else:
    print("Няма реални корени")
  16. 16. Положително или отрицателно

    Прочети цяло число и изпиши дали е положително, отрицателно, или нула.

    Вход
    -4
    Изход
    Отрицателно

    Нужното е в урока: Условия

    Решение
    number = int(input())
    if number > 0:
    print("Положително")
    elif number < 0:
    print("Отрицателно")
    else:
    print("Нула")
  17. 17. Сезони

    Прочети номер на месец (1–12) и изпиши сезона: 12, 1, 2 – Зима, 3–5 – Пролет, 6–8 – Лято, 9–11 – Есен. За друго число изпиши „Невалиден месец“.

    Вход
    4
    Изход
    Пролет

    Нужното е в урока: Условия

    Решение
    month = int(input())
    if month < 1 or month > 12:
    print("Невалиден месец")
    elif month == 12 or month <= 2:
    print("Зима")
    elif month <= 5:
    print("Пролет")
    elif month <= 8:
    print("Лято")
    else:
    print("Есен")
  18. 18. Обратен ред на число

    Прочети цяло положително число и изведи числото с цифрите му в обратен ред: от 123 става 321. Нулите, които излизат отпред, изчезват (от 1200 става 21). Вземай последната цифра с % 10 и я махай с деление на 10.

    Вход
    9071
    Изход
    1709

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    reversed_n = 0
    while n > 0:
    reversed_n = reversed_n * 10 + n % 10
    n //= 10
    print(reversed_n)
  19. 19. Температурен конвертор

    Прочети температура в градуси по Целзий (може да е дробно число, с точка) и я изведи във Фаренхайт с два знака след точката. Формулата е F = C * 9 / 5 + 32.

    Вход
    36.6
    Изход
    97.88 °F

    Нужното е в урока: Оператори и аритметика

    Решение
    celsius = float(input())
    fahrenheit = celsius * 9 / 5 + 32
    print(f"{fahrenheit:.2f} °F")
  20. 20. Име с най-много букви

    На първия ред е броят на имената n, на следващите n реда по едно име. Изведи името с най-много букви и броя им в скоби; ако две имена са еднакво дълги, изведи първото от тях.

    Вход
    4
    Мария
    Александра
    Иван
    Константин
    Изход
    Александра (10 букви)

    Нужното е в урока: Низове: работа с текст

    Решение
    n = int(input())
    longest = ""
    for i in range(n):
    name = input()
    if len(name) > len(longest):
    longest = name
    print(f"{longest} ({len(longest)} букви)")
  21. 21. Брояч на думи

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

    Вход
    Пиша код всеки ден и ставам по-добър
    Изход
    7

    Нужното е в урока: Низове: работа с текст

    Решение
    line = input()
    words = line.split()
    print(len(words))
  22. 22. Просто число

    Прочети цяло число n и провери дали е просто: по-голямо от 1 и се дели само на 1 и на себе си. Достатъчно е да пробваш делителите i, за които i * i <= n.

    Вход
    91
    Изход
    91 не е просто

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    prime = n > 1
    i = 2
    while i * i <= n:
    if n % i == 0:
    prime = False
    break
    i += 1
    if prime:
    print(f"{n} е просто")
    else:
    print(f"{n} не е просто")
  23. 23. Ден от седмицата

    Прочети число от 1 до 7 и изведи името на деня от седмицата на български, като 1 е понеделник. Имената дръж в масив; за друго число изведи „Няма такъв ден“.

    Вход
    5
    Изход
    Петък

    Нужното е в урока: Списъци

    Решение
    day = int(input())
    days = ["Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"]
    if 1 <= day <= 7:
    print(days[day - 1])
    else:
    print("Няма такъв ден")
  24. 24. Факториел

    Прочети цяло число n от 0 до 15 и изведи n! = 1 * 2 * … * n (0! е 1). Още 13! не се побира в int, затова в Java и C# пази произведението в long.

    Вход
    15
    Изход
    15! = 1307674368000

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    factorial = 1
    for i in range(2, n + 1):
    factorial *= i
    print(f"{n}! = {factorial}")
  25. 25. Валидна дата

    Прочети ден, месец и година, всяко на отделен ред, и изведи „Валидна дата“ или „Невалидна дата“. Годината е поне 1, месецът е от 1 до 12, а денят от 1 до броя дни в месеца; февруари има 29 дни във високосна година (делима на 4, но не на 100, освен ако е делима на 400).

    Вход
    29
    2
    2100
    Изход
    Невалидна дата

    Нужното е в урока: Условия

    Решение
    day = int(input())
    month = int(input())
    year = int(input())
    leap = (year % 4 == 0 and year % 100 != 0) or year % 400 == 0
    if month == 2:
    days = 29 if leap else 28
    elif month in (4, 6, 9, 11):
    days = 30
    else:
    days = 31
    if year >= 1 and 1 <= month <= 12 and 1 <= day <= days:
    print("Валидна дата")
    else:
    print("Невалидна дата")
  26. 26. Честота на букви

    Прочети един ред текст и изведи колко пъти се среща всяка буква в него, без значение дали е главна или малка. Изведи буквите по азбучен ред, по една на ред във вида „а: 5“; интервалите и препинателните знаци не се броят.

    Вход
    Банан и ананас!
    Изход
    а: 5
    б: 1
    и: 1
    н: 4
    с: 1

    Нужното е в урока: dict и set

    Решение
    text = input().lower()
    counts = {}
    for c in text:
    if c.isalpha():
    counts[c] = counts.get(c, 0) + 1
    for c in sorted(counts):
    print(f"{c}: {counts[c]}")
  27. 27. Минимум и максимум в масив

    На първия ред е броят n, на следващите n реда по едно цяло число. Прочети ги в масив и изведи най-малкото и най-голямото, като започнеш от първия елемент и сравняваш с останалите.

    Вход
    5
    7
    -3
    12
    0
    4
    Изход
    Най-малко: -3
    Най-голямо: 12

    Нужното е в урока: Списъци

    Решение
    n = int(input())
    numbers = []
    for i in range(n):
    numbers.append(int(input()))
    smallest = numbers[0]
    largest = numbers[0]
    for number in numbers:
    if number < smallest:
    smallest = number
    if number > largest:
    largest = number
    print(f"Най-малко: {smallest}")
    print(f"Най-голямо: {largest}")
  28. 28. Сортиране на масив

    На първия ред е броят n, на следващите n реда по едно цяло число. Подреди ги сам във възходящ ред с метода на мехурчето (n - 1 минавания, във всяко разменяш съседи, които са в грешен ред) и ги изведи на един ред, разделени с интервал.

    Вход
    6
    5
    2
    9
    1
    5
    6
    Изход
    1 2 5 5 6 9

    Нужното е в урока: Списъци

    Решение
    n = int(input())
    numbers = []
    for i in range(n):
    numbers.append(int(input()))
    for p in range(n - 1):
    for i in range(n - 1 - p):
    if numbers[i] > numbers[i + 1]:
    numbers[i], numbers[i + 1] = numbers[i + 1], numbers[i]
    print(*numbers)
  29. 29. Замяна на гласните

    Прочети един ред текст и го изведи, като всяка гласна, главна или малка, е заменена със знака *. Гласните са а, е, и, о, у, ъ, ю, я.

    Вход
    Обичам да програмирам
    Изход
    *б*ч*м д* пр*гр*м*р*м

    Нужното е в урока: Низове: работа с текст

    Решение
    text = input()
    vowels = "аеиоуъюя"
    result = ""
    for c in text:
    if c.lower() in vowels:
    result += "*"
    else:
    result += c
    print(result)
  30. 30. Сума на цифрите

    Прочети цяло неотрицателно число и изведи сумата на цифрите му. Последната цифра е n % 10, а n / 10 я маха (в Python n // 10).

    Вход
    9875
    Изход
    29

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    total = 0
    while n > 0:
    total += n % 10
    n //= 10
    print(total)
  31. 31. Палиндром

    Прочети един ред текст и провери дали е палиндром, тоест чете се еднакво и отзад напред. Главните и малките букви се смятат за еднакви, а интервалите се пропускат. Изведи „Палиндром“ или „Не е палиндром“.

    Вход
    Капак
    Изход
    Палиндром

    Нужното е в урока: Низове: работа с текст

    Решение
    text = input().lower().replace(" ", "")
    if text == text[::-1]:
    print("Палиндром")
    else:
    print("Не е палиндром")
  32. 32. Сигурна парола

    Чети пароли, по една на ред, докато дойде сигурна: поне 8 знака, поне една цифра, една главна и една малка буква. За всяка слаба изведи първото неизпълнено правило в този ред („Твърде кратка“, „Няма цифра“, „Няма главна буква“, „Няма малка буква“), а за сигурната „Паролата е приета“ и спри.

    Вход
    kotka
    kotkamiau
    kotkamiau7
    Kotkamiau7
    Изход
    Твърде кратка
    Няма цифра
    Няма главна буква
    Паролата е приета

    Нужното е в урока: Низове: работа с текст

    Решение
    while True:
    password = input()
    digit = False
    upper = False
    lower = False
    for c in password:
    if c.isdigit():
    digit = True
    elif c.isupper():
    upper = True
    elif c.islower():
    lower = True
    if len(password) < 8:
    print("Твърде кратка")
    elif not digit:
    print("Няма цифра")
    elif not upper:
    print("Няма главна буква")
    elif not lower:
    print("Няма малка буква")
    else:
    print("Паролата е приета")
    break
  33. 33. Обратен масив

    На първия ред е броят n, на следващите n реда по едно цяло число. Прочети ги в масив и ги изведи в обратен ред, на един ред, разделени с интервал: обходи масива от последния индекс към нулевия.

    Вход
    4
    10
    -2
    7
    3
    Изход
    3 7 -2 10

    Нужното е в урока: Списъци

    Решение
    n = int(input())
    numbers = []
    for i in range(n):
    numbers.append(int(input()))
    line = ""
    for i in range(n - 1, -1, -1):
    line += str(numbers[i])
    if i > 0:
    line += " "
    print(line)
  34. 34. Брой на елементите

    Прочети един ред с думи, разделени с по един интервал, и изведи колко пъти се среща всяка дума, във вида „дума: брой“. Думите излизат в реда, в който са се появили за първи път.

    Вход
    ябълка круша ябълка слива круша ябълка
    Изход
    ябълка: 3
    круша: 2
    слива: 1

    Нужното е в урока: dict и set

    Решение
    line = input()
    counts = {}
    for word in line.split(" "):
    counts[word] = counts.get(word, 0) + 1
    for word in counts:
    print(f"{word}: {counts[word]}")
  35. 35. Прости числа

    Прочети число N и изведи на един ред, разделени с интервал, всички прости числа от 2 до N.

    Вход
    30
    Изход
    2 3 5 7 11 13 17 19 23 29

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    primes = []
    for i in range(2, n + 1):
    prime = True
    d = 2
    while d * d <= i:
    if i % d == 0:
    prime = False
    break
    d += 1
    if prime:
    primes.append(str(i))
    print(" ".join(primes))
  36. 36. Средна стойност

    На един ред са дадени цели числа, разделени с интервал. Изведи средната им стойност с два знака след точката.

    Вход
    5 8 12 6
    Изход
    Средна стойност: 7.75

    Нужното е в урока: Списъци

    Решение
    parts = input().split()
    total = 0
    for part in parts:
    total += int(part)
    average = total / len(parts)
    print(f"Средна стойност: {average:.2f}")
  37. 37. Сортиране по дължина

    На един ред са дадени думи, разделени с интервал. Подреди ги по дължина от най-късата към най-дългата (думите с еднаква дължина остават в реда от входа) и ги изведи на един ред.

    Вход
    смокиня киви ябълка дюля круша
    Изход
    киви дюля круша ябълка смокиня

    Нужното е в урока: Низове: работа с текст

    Решение
    words = input().split()
    for i in range(len(words) - 1):
    for j in range(len(words) - 1 - i):
    if len(words[j]) > len(words[j + 1]):
    words[j], words[j + 1] = words[j + 1], words[j]
    print(" ".join(words))
  38. 38. Брояч на изречения

    Прочети един ред текст и изведи колко изречения има в него. Изречението завършва с точка, удивителна или въпросителна; поредица от такива знаци (като „...“ или „?!“) е един край.

    Вход
    Здравей! Как си? Аз съм добре... А ти?!
    Изход
    Изречения: 4

    Нужното е в урока: Низове: работа с текст

    Решение
    text = input()
    ends = ".!?"
    count = 0
    for i in range(len(text)):
    is_end = text[i] in ends
    next_is_end = i + 1 < len(text) and text[i + 1] in ends
    if is_end and not next_is_end:
    count += 1
    print(f"Изречения: {count}")
  39. 39. Числа на Фибоначи

    Редицата на Фибоначи започва с 1, 1, а всяко следващо число е сборът на предходните две. Прочети N (от 1 до 50) и изведи N-тото число от редицата.

    Вход
    40
    Изход
    102334155

    Нужното е в урока: Цикли

    Решение
    n = int(input())
    previous = 0
    current = 1
    for i in range(1, n):
    previous, current = current, previous + current
    print(current)
  40. 40. Намиране на медиана

    На един ред са дадени цели числа, разделени с интервал. Изведи медианата им с един знак след точката: средното число след подреждане, а при четен брой числа – средното аритметично на двете средни.

    Вход
    12 3 7 9 1 8
    Изход
    Медиана: 7.5

    Нужното е в урока: Списъци: append, remove и sort

    Решение
    numbers = []
    for part in input().split():
    numbers.append(int(part))
    numbers.sort()
    n = len(numbers)
    if n % 2 == 1:
    median = numbers[n // 2]
    else:
    median = (numbers[n // 2 - 1] + numbers[n // 2]) / 2
    print(f"Медиана: {median:.1f}")
  41. 41. Графика на символи

    Прочети един ред текст. За всеки символ без интервала, в реда на първата му поява, изведи ред „символ | звездички“ с по една звездичка за всяко срещане в текста.

    Вход
    баба баница
    Изход
    б | ***
    а | ****
    н | *
    и | *
    ц | *

    Нужното е в урока: Низове: работа с текст

    Решение
    text = input()
    for i in range(len(text)):
    c = text[i]
    if c != " " and text.index(c) == i:
    count = 0
    for other in text:
    if other == c:
    count += 1
    print(c + " | " + "*" * count)
  42. 42. Транспониране на матрица

    На първия ред са броят редове R и броят колони C, следват R реда с по C числа, разделени с интервал. Изведи транспонираната матрица: C реда с по R числа, където редовете стават колони.

    Вход
    2 3
    1 2 3
    4 5 6
    Изход
    1 4
    2 5
    3 6

    Нужното е в урока: Двумерни масиви

    Решение
    size = input().split()
    rows = int(size[0])
    cols = int(size[1])
    matrix = []
    for r in range(rows):
    row = []
    for part in input().split():
    row.append(int(part))
    matrix.append(row)
    for c in range(cols):
    line = []
    for r in range(rows):
    line.append(str(matrix[r][c]))
    print(" ".join(line))
  43. 43. Пътища в лабиринт

    На първия ред са R и C, следват R реда по C знака: „.“ е свободна клетка, „#“ е стена. Като се движиш само надясно или надолу и не стъпваш на стена, изведи броя на всички пътища от горния ляв до долния десен ъгъл.

    Вход
    4 5
    .....
    .#.#.
    ...#.
    #....
    Изход
    Пътища: 4

    Нужното е в урока: Рекурсия

    Решение
    def count_paths(maze, r, c):
    if r >= len(maze) or c >= len(maze[0]) or maze[r][c] == "#":
    return 0
    if r == len(maze) - 1 and c == len(maze[0]) - 1:
    return 1
    return count_paths(maze, r + 1, c) + count_paths(maze, r, c + 1)
    size = input().split()
    rows = int(size[0])
    maze = []
    for r in range(rows):
    maze.append(input())
    print(f"Пътища: {count_paths(maze, 0, 0)}")
  44. 44. Статистика на оценките

    На един ред са дадени оценки от 2 до 6, разделени с интервал. Изведи колко са отличните, много добрите, добрите, средните и слабите, всяка категория на отделен ред.

    Вход
    6 4 5 6 3 5 2 6 5 4
    Изход
    Отличен (6): 3
    Много добър (5): 3
    Добър (4): 2
    Среден (3): 1
    Слаб (2): 1

    Нужното е в урока: Списъци

    Решение
    names = ["", "", "Слаб", "Среден", "Добър", "Много добър", "Отличен"]
    counts = [0] * 7
    for part in input().split():
    counts[int(part)] += 1
    for grade in range(6, 1, -1):
    print(f"{names[grade]} ({grade}): {counts[grade]}")
  45. 45. Римски цифри

    Прочети цяло число от 1 до 3999 и го изведи с римски цифри (I, V, X, L, C, D, M, като 4 е IV, 9 е IX, 40 е XL и т.н.).

    Вход
    1994
    Изход
    MCMXCIV

    Нужното е в урока: Списъци

    Решение
    number = int(input())
    values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
    symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
    roman = ""
    for i in range(len(values)):
    while number >= values[i]:
    roman += symbols[i]
    number -= values[i]
    print(roman)
  46. 46. Симулация на монета

    Прочети семе x (от 1 до 2147483646) и брой хвърляния N, всяко на отделен ред. При всяко хвърляне смени x = x * 16807 % 2147483647; четно x е ези (Е), нечетно е тура (Т). Изведи хвърлянията на един ред, после колко пъти се е паднало ези и колко тура.

    Вход
    42
    10
    Изход
    ЕТТТЕТТЕЕТ
    Ези: 4
    Тура: 6

    Нужното е в урока: Цикли

    Решение
    x = int(input())
    n = int(input())
    tosses = ""
    heads = 0
    for i in range(n):
    x = x * 16807 % 2147483647
    if x % 2 == 0:
    tosses += "Е"
    heads += 1
    else:
    tosses += "Т"
    print(tosses)
    print(f"Ези: {heads}")
    print(f"Тура: {n - heads}")
  47. 47. Симетричен масив

    На един ред са дадени цели числа, разделени с интервал. Провери дали масивът е симетричен, тоест чете се еднакво отляво надясно и отдясно наляво.

    Вход
    1 2 3 2 1
    Изход
    Симетричен

    Нужното е в урока: Списъци

    Решение
    numbers = []
    for part in input().split():
    numbers.append(int(part))
    symmetric = True
    for i in range(len(numbers) // 2):
    if numbers[i] != numbers[len(numbers) - 1 - i]:
    symmetric = False
    break
    print("Симетричен" if symmetric else "Не е симетричен")
  48. 48. Балансирани скоби

    Прочети един ред текст и провери дали скобите (), [] и {} в него са балансирани: всяка отваряща има своята затваряща от същия вид и двойките не се пресичат. Другите символи не се броят.

    Вход
    (a + [b) * c]
    Изход
    Небалансирани

    Нужното е в урока: Стек, опашка и свързан списък

    Решение
    text = input()
    opening = "([{"
    closing = ")]}"
    stack = []
    balanced = True
    for c in text:
    if c in opening:
    stack.append(c)
    elif c in closing:
    if not stack or opening.index(stack.pop()) != closing.index(c):
    balanced = False
    break
    if balanced and not stack:
    print("Балансирани")
    else:
    print("Небалансирани")
  49. 49. Последователност от еднакви елементи

    На един ред са дадени цели числа, разделени с интервал. Намери най-дългата поредица от еднакви съседни числа и я изведи на един ред; ако има няколко с еднаква дължина, изведи първата.

    Вход
    2 1 1 3 3 3 2 2 2 5
    Изход
    3 3 3

    Нужното е в урока: Списъци

    Решение
    numbers = []
    for part in input().split():
    numbers.append(int(part))
    best_value = numbers[0]
    best_length = 1
    length = 1
    for i in range(1, len(numbers)):
    if numbers[i] == numbers[i - 1]:
    length += 1
    else:
    length = 1
    if length > best_length:
    best_length = length
    best_value = numbers[i]
    print(" ".join([str(best_value)] * best_length))
  50. 50. Най-кратък път в матрица

    На първия ред са R и C, следват R реда по C знака: „.“ е свободна клетка, „#“ е стена, „S“ е началото, „E“ е целта. С ходове нагоре, надолу, наляво и надясно изведи най-малкия брой ходове от S до E или „Няма път“, ако E е недостижима.

    Вход
    5 6
    S.#...
    .##.#.
    ...#..
    #.#..#
    ...E.#
    Изход
    7

    Нужното е в урока: Стек, опашка и свързан списък

    Решение
    from collections import deque
    size = input().split()
    rows = int(size[0])
    cols = int(size[1])
    grid = []
    for r in range(rows):
    grid.append(input())
    dist = []
    queue = deque()
    for r in range(rows):
    dist.append([-1] * cols)
    for c in range(cols):
    if grid[r][c] == "S":
    dist[r][c] = 0
    queue.append((r, c))
    moves = [(-1, 0), (1, 0), (0, -1), (0, 1)]
    answer = "Няма път"
    while queue:
    r, c = queue.popleft()
    if grid[r][c] == "E":
    answer = str(dist[r][c])
    break
    for dr, dc in moves:
    nr = r + dr
    nc = c + dc
    if 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] != "#" and dist[nr][nc] == -1:
    dist[nr][nc] = dist[r][c] + 1
    queue.append((nr, nc))
    print(answer)

Основи на езика

Функции

Класове и обекти

Наследяване и полиморфизъм

Грешки и изключения

Текст и файлове

Колекции

Модерен Python

  • Ламбди: Подреждане по няколко полета · Филтър на поръчки · Отстъпки една след друга
  • Списъчни изрази и генератори: Продажби по категория · Топ 3 продукта · Средна оценка · Думите в текст
  • dataclass, match и шаблони: Фигури · Цена на доставка · Точка като ключ
  • Шаблони за дизайн: Отстъпки като стратегии · „Уведоми ме, когато е налично“ · Фабрика за известия · Стар термометър

Програми в истинския свят

  • Тестове с unittest: Калкулаторът на отстъпки · Сметката · Бъгът в средната оценка
  • Нишки: Паралелна сума · Сваляне с басейн · Брояч без загуби
  • Мрежово програмиране: Ехо сървър · Сървър с команди · Чат за двама
  • Бази данни: Каталог · Търсене по част от името · Превод, който се проваля наполовина
  • Reflection и декоратори: Всички полета, клас по клас · Мини JSON · Свой пускач на тестове

Да направим игра

Хрониките на Арканум

Epic Cosmos: империята

Проект

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·