Задача 5. Текстовый редактор

Мы продолжаем разрабатывать новый текстовый редактор, и в этот раз нам поручили написать для него код, который считает количество любой буквы и любой цифры в тексте (а не только буквы Ы как раньше).

Напишите функцию count_letters, которая принимает на вход текст и подсчитывает, какое в нём количество цифр K и букв N.

Функция должна вывести на экран информацию о найденных буквах и цифрах в определенном формате.

Пример:
Введите текст: 100 лет в обед
Какую цифру ищем? 0
Какую букву ищем? л

Количество цифр 0: 2
Количество букв л: 1

Решение:

# Ленивый вариант без циклов
def count_letters2(text, n, l):
  count_number = text.count(str(n))
  count_letter = text.count(l)
  print(f'\nКоличество цифр {n}: {count_number}')
  print(f'Количество букв {n}: {count_letter}')

# Вариант с циклом
def count_letters(text, n, l):
  count_number = 0
  count_letter = 0
  for i in text:
    if i == str(n):
      count_number += 1
    if i == l:
      count_letter += 1
  print(f'\nКоличество цифр {n}: {count_number}')
  print(f'Количество букв {n}: {count_letter}')


text = input('Введите текст: ')
number = int(input('Какую цифру ищем? '))
letter = input('Какую букву ищем? ')
count_letters(text, number, letter)
count_letters2(text, number, letter)


Задача 4. Число наоборот

Вводится последовательность чисел, которая оканчивается нулём. Реализуйте функцию, которая принимает в качестве аргумента каждое число, переворачивает его и выводит на экран.

Пример:
Введите число: 1234
Число наоборот: 4321
Введите число: 1000
Число наоборот: 0001
Введите число: 0
Программа завершена!

Дополнительно: добейтесь такого вывода чисел, если в его начале идут нули.
Введите число: 1230
Число наоборот: 321

Кстати, нули, которые мы убрали, называются ведущими.

Решение:

def print_back(n):
  s = list(str(n))
  s = list(map(int, s))
  new_number = ''
  for i in range(len(s) - 1, -1, -1):
    new_number += str(s[i])
  print('Число наоборот:', int(new_number))


while True:
  number = int(input('Введите число: '))
  if number == 0:
    print('Программа завершена!')
    break
  elif number < 0:
    print_back(abs(number))
  else:
    print_back(number)
  print('')


Задача 3. Апгрейд калькулятора

Степан, как и большая часть населения планеты, для расчёта суммы и разности чисел использует калькулятор.

Однако в работе ему нужно делать не только обычные действия вроде сложения и вычитания, а делать что-то вручную он уже устал.

Поэтому Степан решил немного расширить функциональность своего калькулятора.
Напишите программу, которая спрашивает у пользователя число и действие, которое нужно с ним сделать: вывести сумму его цифр, вывести максимальную цифру или вывести минимальную цифру.

Каждое действие оформите в виде отдельной функции, а основную программу зациклите.

Решение:

menu = 'Доступные операции:\n \
A - Вывести сумму его цифр\n \
B - Вывести максиамльную цифру\n \
C - Вывести минимальную цифру\n \
Q - Выход'

def get_number_array(n):
  # Не хотелось циклом перебирать
  s = list(str(n))
  s = list(map(int, s))
  return s

def print_summ(n):
  print('Сумма чисел:', sum(get_number_array(n)))

def print_max(n):
  print('Максимальное число:', max(get_number_array(n)))

def print_min(n):
  print('Минимальное число:', min(get_number_array(n)))

def get_operation():
  print(menu)
  operation = input('Что сделать: ').upper()
  if (operation != 'A' and \
      operation != 'B' and \
      operation != 'C' and \
      operation != 'Q'):
    get_operation()
  return operation

while True:
  number = int(input('Введите число: '))
  if number == 0:
    break
  operation = get_operation()
  if operation == 'A':
    print_summ(number)
  elif operation == 'B':
    print_max(number)
  elif operation == 'C':
    print_min(number)
  elif operation == 'Q':
    break
  print()


Задача 2. Функция в функции

Евгений проходит специальный тест по программированию. У него всё шло хорошо, пока он не наткнулся на тему “Функции”.

Задание звучит так:
Основная ветка программы, не считая заголовков функций, состоит из одной строки кода.

Это вызов функции test().
В ней запрашивается на ввод целое число.
Если оно положительное, то вызывается функция positive(), тело которой содержит команду вывода на экран слова «Положительное».
Если число отрицательное, то вызывается функция negative(), ее тело содержит выражение вывода на экран слова «Отрицательное».

Помогите Евгению и реализуйте такую программ

Решение:

def test():
  number = int(input('Введите число: '))
  if number > 0:
    positive()
  elif number < 0:
    negative()
  else:
    print('Я вас не совсем понял. ;)')
    test()

def positive():
  print('Положительное')

def negative():
  print('Отрицательное')

test()


Задача 1. Сумма чисел

Напишите функцию summa_n, которая принимает одно целое положительное число N и выводит сумму всех чисел от 1 до N включительно.

Пример работы программы:
Введите число: 5
Я знаю, что сумма чисел от 1 до 5 равна 15

Решение:

def summ_to(n):
  s = 0
  for i in range(1, n + 1):
    s += i
  print(f'\nЯ знаю, что сумма чисел от 1 до {n} равна {s}')

end = int(input('Введите число: '))
summ_to(end)


Задача 10. За что?

Вы встретились со своим старым другом, который тоже изучает программирование, правда, в другом учебном заведении. За чашкой кофе он пожаловался вам, что сумасбродный препод дал им задание написать программу, которая из двух введённых чисел определяет наибольшее, не используя при этом условных операторов, циклов и встроенную функцию max.
Радуясь, что на вашем курсе такого не требуют, вы всё-таки решаете помочь своему другу.

Напишите для него эту программу.

Пример:
Введите первое число: 10
Введите второе число: 5

Наибольшее число: 10

Решение:

a = int(input('Введите первое число: '))
b = int(input('Введите второе число: '))

print('Наибольшее число:', (a // b * a + b // a * b) // (a // b + b // a))


Задача 9. Уравнение

Даны действительные коэффициенты a, b, c, при этом a≠0. Решите квадратное уравнение ax^2+bx+c=0 и выведите все его корни. Если уравнение имеет два корня, выведите два корня в порядке возрастания, если один корень — выведите одно число, если нет корней — не выводите ничего

Решение:

import math


a = float(input('Введите число A: '))
b = float(input('Введите число B: '))
c = float(input('Введите число C: '))

if a != 0:
  d = b ** 2 - (4 * a * c)
  if d == 0:
    x = -b / (2 * a)
    print(x)
  elif d > 0:
    x1 = float(((-b) + math.sqrt(d)) / (2 * a))
    x2 = float(((-b) - math.sqrt(d)) / (2 * a))
    k1 = x1.is_integer()
    k2 = x2.is_integer()
    if k1 and not k2:
      if x1 > x2:
        print('{0:.6f}'.format(x2), x1)
      else:
        print(x1, '{0:.6f}'.format(x2))
    elif not k1 and k2:
      if x2 > x1:
        print('{0:.6f}'.format(x1), x2)
      else:
        print(x2, '{0:.6f}'.format(x1))
    elif not k1 and not k2:
      if x1 > x2:
        print('{0:.6f}'.format(x2), '{0:.6f}'.format(x1))
      else:
        print('{0:.6f}'.format(x1), '{0:.6f}'.format(x2))
    else:
      if x1 > x2:
        print(int(x2), int(x1))
      else:
        print(int(x1), int(x2))


Задача 8. Часы

С начала суток часовая стрелка повернулась на угол в α градусов. Определите на какой угол повернулась минутная стрелка с начала последнего часа. Входные и выходные данные — действительные числа. При решении этой задачи нельзя пользоваться условными операторами и циклами.

Решение:

# 360 / 12 = 30 угол 1 часа

alpha = float(input('Введите угол часовой стрелки: '))
print(alpha % 30 * 12)


Задача 7. Ход конём

В рамках разработки шахматного ИИ стоит новая задача. По заданным вещественным координатам коня# и второй точки программа должна определить может ли конь ходить в эту точку.

Используйте как можно меньше конструкций if и логических операторов.
Обеспечьте контроль ввода.
Введите местоположение коня:
0.071
0.118
Введите местоположение точки на доске:
0.213
0.068

Конь в клетке (0, 1). Точка в клетке (2, 0).
Да, конь может ходить в эту точку.

Решение:

print('Введите местоположение коня:')
figura_x = float(input('X: '))
figura_y = float(input('Y: '))
print('Введите местоположение точки на доске:')
point_x = float(input('X: '))
point_y = float(input('Y: '))

fx_square = int(figura_x * 10)
fy_square = int(figura_y * 10)
px_square = int(point_x * 10)
py_square = int(point_y * 10)

print(f'Конь в клетке ({fx_square}, {fy_square}). Точка в клетке ({px_square}, {py_square}).')
if abs((figura_x - point_x) * (figura_y - point_y)) == 2:
  print('Нет, конь не может ходить в эту точку.')
else:
  print('Да, конь может ходить в эту точку.')


Задача 6. Метеостанция

Для удобства работы сотрудников международной метеостанции каждый день нужно распечатывать различные таблицы соответствия градусов по шкале Цельсия и Фаренгейта.

Напишите программу, которая принимает на вход три целых числа в градусах Цельсия: нижняя граница температуры, верхняя граница температуры и шаг.

Программа выводит на экран таблицу соответствия градусов Цельсия градусам Фаренгейта от нижней до верхней границы с указанным шагом.

Обеспечьте контроль ввода. Верхняя граница должна печататься, даже если последний шаг “перепрыгнул“ ее.
Известно, что 0С соответствует 32F, а каждый градус Цельсия эквивалентен 1.8 градусам Фаренгейта.

Пример:
Ввод:
Нижняя граница: 0
Верхняя граница: 50
Шаг: 20

Вывод:
C     F
0     32
20    68
40    104
50    122

Решение:

print('Ввод:')
start = int(input('Нижняя граница: '))
stop = int(input('Верхняя граница: '))
step = int(input('Шаг: '))

print('\nВывод:')
print('C\t\t F')
for count in range(start, stop + step, step):
  if count > stop:
    count = stop
  result = round(count * 1.8 + 32)
  print(count, '\t\t', result)


Задача 5. Вот это объёмы!

Для курсовой работы по физике Андрею нужно сравнить объёмы двух планет: Земли и какой-нибудь случайной, которая может в теории существовать в нашей вселенной. Андрей хорошо разбирается в формулах, а вот считать что-то, а уж тем более самому — это явно не его. Объём Земли ему известен заранее — это 10.8321 * 10 ** 11 км3

А вот объём случайной планеты ему нужно будет посчитать. Благо, у него есть формула V = 4/3 πR ** 3
где V — это объём, π — число пи, а R — радиус планеты.

Напишите программу, которая получает на вход радиус случайной планеты и выводит на экран во сколько раз планета Земля меньше или больше по объёму. Ответ округлите до трёх знаков после запятой.

Пример:
Введите радиус случайной планеты: 3389.5
Объём планеты Земля больше в 6.641 раз

Пример 2:
Введите радиус случайной планеты: 7000
Объём планеты Земля меньше в (1/0.754) = 1.326 раз

Решение:

import math


radius = float(input('Введите радиус планеты: '))
v = 10.8321 * (10 ** 11)
v1 = round(4 * math.pi / 3 * (radius ** 3), 3)
answer = 'Объём планеты Земля {0} в {1} раз.'

if v1 < v:
  print(answer.format('больше', round(v / v1, 3)))
else:
  print(answer.format('меньше', round(v1 / v, 3)))


Задача 4. Первая цифра

Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. При решении этой задачи нельзя пользоваться условной инструкцией, циклом или строками.

Решение:

num = float(input('Введите число: '))
print(int(num * 10) % 10)


Задача 3. Убийца Steam

Вы пишете программу-инсталлятор для компьютерной игры. Пока инсталлятор скачивает обновление, пользователю нужно показать сколько процентов уже скачалось, чтобы он мог решить пойти заварить чаю, или подождать у экрана компьютера.

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

Для каждой секунды программа рассчитывает и выводит на экран сколько процентов от всего объема уже скачано, до тех пор пока не будет скачан весь объем. В конце программа должна показать сколько всего секунд заняло скачивание обновления. Обеспечьте контроль ввода.

Пример:
Укажите размер файла для скачивания: 123
Какова скорость вашего соединения? 27

Прошло 1 сек. Скачано 27 из 123 Мб (22%)
Прошло 2 сек. Скачано 54 из 123 Мб (44%)
Прошло 3 сек. Скачано 81 из 123 Мб (66%)
Прошло 4 сек. Скачано 108 из 123 Мб (88%)
Прошло 5 сек. Скачано 123 из 123 Мб (100%)

Решение:

import math
import time


file = int(input('Укажите размер файла: '))
speed = int(input('Какова скорость вашего соединения? '))
second = 1
str_info = 'Прошло {0} секунд. Скачено {1} Мб из {2} Мб ( {3}% )'
 
for mb in range(speed, file, speed):
  print(str_info.format(second, mb, file, math.ceil(100 * mb / file)))
  second += 1
  time.sleep(1)
else:
  print(str_info.format(second, file, file, math.ceil(100 * file / file)))


Задача 2. Грубая математика

В одном аналитическом центре, где занимаются разного рода математическим анализом, работал практикант, который написал программу для расчёта некоторых функций. Правда, он в тот день очень устал и немного не так прочитал техническое задание и функции теперь рассчитываются довольно грубо.

Вводится последовательность из N вещественных чисел. При этом положительные числа округляются вверх, отрицательные округляются вниз.

Напишите программу, которая выводит натуральный логарифм от числа, если оно положительное, и экспоненту в степени числа, если оно отрицательное.

Пример:
Введите кол-во чисел: 3
Введите число: 1.3
x = 2 log(x) = 0.6931471805599453

Введите число: -2.1
x = -3 exp(x) = 0.049787068367863944

Введите число: -5.9
x = -6 exp(x) = 0.0024787521766663585

Решение:

# Переменные log_x и exp_x только для того, чтобы не высчитывать дважды

import math


end = int(input('Введите количество чисел: '))

for i in range(end):
  number = float(input('Введите число: '))
  if (number > 0):
    log_x = math.ceil(number);
    print('x =', log_x, '\tlog(x) =', math.log(log_x))
  elif (number < 0):
    exp_x = math.floor(number)
    print('x =', exp_x, '\texp(x) =', math.exp(exp_x))
  else:
    print('0')


Задача 1. Конвертация

При покупках за рубежом с помощью карты банки делают конвертацию через промежуточную валюту.
Например, если купить что-то в евро, то сначала эта сумма конвертируется в доллары, а уже потом — в рубли.

Напишите программу, которая получает на вход стоимость покупки в евро, затем выводит ответ в рублях.

Мы живём в альтернативной реальности, где 1 евро = 1.25 доллара, а 1 доллар = 60.87 рублей.

Решение:

cost = float(1);
rub = 0;

while int(cost) != 0:
  cost = float(input('Введите стоимость товара (0 - выход): '))
  rub = round((cost * 1.25) * 60.87, 2)
  if cost > 0:
    print('Стоимость товара в рублях составила:', rub)