Задача 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)


Задача 3. Индекс массы тела

Алексей работает диетологом в частной клинике, каждый день он принимает пациентов разных возрастов и с разными показателями роста (в метрах) и веса (в кг). Для каждого человека ему нужно считать индекс массы тела — это вес поделить на рост в квадрате. По государственным стандартам индекс округляется до двух знаков после точки. Затем по этому индексу определяется, всё ли в порядке у человека с массой тела: если до 18.5, то недобор; до 25 — всё нормально, до 30 уже идёт избыток, а после 30 — ожирение. Напишите такую программу для Алексея.

Решение:

height = float(input('Ваш рост: '))
weight = float(input('Ваш вес: '))
bmi = round(weight / height ** 2, 2)
print('Ваш индекс массы тела:', bmi)
u_vas = 'У вас '
massa = ' масса тела'

if bmi < 18.5:
  print(u_vas + 'недостаточная' + massa)
elif bmi < 25:
  print(u_vas + 'нормальная' + massa)
elif bmi < 30:
  print(u_vas + 'избыточная' + massa)
else:
  print(u_vas + 'ожирение!') 


Задача 10. Поменять местами: не всё так просто!

Мы умеем менять местами строковые переменные и знаем, что в переменных, кроме строк, можно хранить и числа. Напишите программу, которая меняла бы значения двух переменных местами, но без использования третьей переменной и без использования синтаксического сахара, который мы разбирали, а именно — без конструкции a,b = b,a. В переменные будут вводиться только числа.

Изменять, удалять, менять местами 1, 2 строку, первый и второй print нельзя. Но между 3-й и 5-й строчкой можно вставлять сколько угодно строк кода, не трогая последний принт.

Решение:

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

a = a + b
b = a - b
a = a - b

print(a, b)

Задача 9. В обратном порядке

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

Пример ввода: 1234.
Пример вывода: 4321.

Решение:

n = int(input('Введите любое (четырёх значное) число: '))
n1 = n % 10
n2 = n % 100 // 10
n3 = n // 100 % 10
n4 = n // 1000

n2n = n1 * 1000 + n2 * 100 + n3 * 10 + n4
print(n2n)


Задача 8. Режем число на части

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

Решение:

n = int(input('Введите любое (четырёх значное) число: '))
n1 = n // 1000
n2 = n // 100 % 10
n3 = n // 10 - n1 * 100 - n2 * 10
n4 = n % 10

print(n1, n2, n3, n4)


Задача 7. Поездка по кругу

Вася решил потренироваться перед марафоном и покататься вокруг Москвы на скорость. Длина дороги — 115 километров.
Вася стартует с нулевого километра и едет со скоростью v километров в час.
На какой отметке он остановится через t часов?

Реализуйте программу, которая спрашивает у пользователя v и t, и выводит целое число от 0 до 114 — номер километра, на котором остановится Вася. Учтите, что он может прокатиться больше одного круга.

Решение:

v = int(input('Введите скорость: '))
t = int(input('Введите время (в часах): '))
lenght = 115

print((v * t) % lenght)


Задача 6. Сумма последних цифр

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

Пример:
Введите первое число: 456
Введите второе число: 123
Сумма: 79

Решение:

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

res = a % 100 + b % 100
print('Сумма:', res)


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

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

Решение:

minutes = int(input('Введите количество минут: '))
# Вариант №1
clock = (minutes // 60) % 24
minute = (minutes - (minutes // 60) * 60) % 60
print(clock, minute)

# Вариант №2
clock = minutes // 60
minute = (minutes - (minutes // 60) * 60) % 60
print(clock, minute)


Задача 4. Площадь треугольника

Напишите программу, которая запрашивает у пользователя длины двух катетов в прямоугольном треугольнике и выводит его площадь.
Формула:
S = ab/2

Решение:

leg1 = int(input('Введите длину первого катета: '))
leg2 = int(input('Введите длину первого катета: '))

s = leg1 * leg2 / 2
print(s)


Задача 3. Следующее и предыдущее

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

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

Результат:
Введите число: 5
После числа 5 идет число 6
До числа 5 идет число 4

Решение:

number = int(input('Введите число: '))
number_next = number + 1 if number >= 0 else number - 1
number_prev = number - 1 if number >= 0 else number + 1

print("После числа", number, "идет число", number_next, end=".\n")
print("До числа", number, "идет число", number_prev, end=".\n")


Задача 10. Яма

В одной компьютерной текстовой игре рисуются всяческие элементы ландшафта.
Напишите программу, которая получает на вход число N и выводит на экран числа в виде “ямы”:

Задача 10. Яма

Решение:

height = int(input('Укажите высоту ямы: '))
row = height - 1
print()

while row >= 0:
  for i in range(-height, height + 1):
    if abs(i) > row:
      print(abs(i), end = '')
    elif i == 0:
      print(end = '')
    else:
      print('.', end = '')
  row -= 1
  print()