Количество разрядов в числе

Количество разрядов в числе

Чтобы программно посчитать количество разрядов числа, необходимо последовательно его делить (нацело) на 10, пока это число не станет равным нулю. При этом считать количество делений. Например, дано число 345. После первого деления останется 34, после второго — 3, после третьего — 0. Таким образом, мы видим, что количество делений равно количеству разрядов числа.

Для реализации данного алгоритма следует использовать цикл «пока» (while). Условием его выполнения является неравенство числа нулю. Хотя, если вводятся только положительные числа или перед этим отрицательное число превращают в положительное, в условии может быть «больше нуля».

ЧИТАТЬ ДАЛЕЕ …

Задача 9. Аннуитетный платёж

Кредит в сумме S млн руб., выданный на n лет под i% годовых, подлежит погашению равными ежегодными выплатами в конце каждого года, включающими процентные платежи и сумму в погашение основного долга.
Проценты начисляются в один раз в год. После выплаты третьего платежа достигнута договорённость между кредитором и заёмщиком о продлении срока погашения займа на n_2 лет и увеличении процентной ставки с момента конверсии до i_2%.

Напишите программу, которая выводит план погашения оставшейся части долга.
A = KS
K = i(1 + i) ** n / (1 + i) ** n — 1

Задача 9. Аннуитетный платёж
ЧИТАТЬ ДАЛЕЕ …

Задача 8. Сумма ряда

Пользователь вводит действительное число# «х» и точность «precision».
P.S: Формулу смотреть на сайте 🙂

Задача 8. Сумма ряда

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

Пример:

Введите точность: 0.001
Введите x: 5
Сумма ряда = 0.2836250150891709
ЧИТАТЬ ДАЛЕЕ …

Задача 7. Яйца

В рамках программы колонизации Марса компания «Спейс Инжиниринг» вывела особую породу черепах, которые, по задумке, должны размножаться, откладывая яйца в марсианском грунте. Откладывать яйца слишком близко к поверхности опасно из-за радиации, а слишком глубоко — из-за давления грунта и недостатка кислорода. Вообще, факторов очень много, но специалисты проделали большую работу и предположили, что уровень опасности для черепашьих яиц рассчитывается по формуле D = x**3 − 3x**2 − 12x + 10, где x — глубина кладки в метрах, а D — уровень опасности в условных единицах.

Для тестирования гипотезы нужно взять пробу грунта на безопасной, согласно формуле, глубине.

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

Известно, что глубина точно больше нуля и меньше четырёх метров.

Обеспечьте контроль ввода.

Пример:

Введите максимально допустимый уровень опасности: 0.01
Приблизительная глубина безопасной кладки: 0.732421875 м

ЧИТАТЬ ДАЛЕЕ …

Задача 6. Маятник

Известно, что амплитуда качающегося маятника с каждым разом затухает на 8,4% от амплитуды прошлого колебания. Если качнуть маятник, то, строго говоря, он не остановится никогда, просто амплитуда будет постоянно уменьшаться до тех пор, пока мы не сочтём такой маятник остановившимся. Напишите программу, определяющую, сколько раз качнётся маятник, прежде чем он, по нашему мнению, остановится. Программа получает на вход начальную амплитуду колебания в сантиметрах и конечную амплитуду его колебаний, которая считается остановкой маятника.
Обеспечьте контроль ввода.

Пример:

Введите начальную амплитуду: 1
Введите амплитуду остановки: 0.1

Маятник считается остановившимся через 27 колебаний


ЧИТАТЬ ДАЛЕЕ …

Задача 5. Недоделка 2

Вы всё так же работаете в конторе по разработке игр и смотрите различные программы прошлого горе-программиста. В одной из игр для детей, связанной с мультяшной работой с числами, вам нужно было написать код по следующим условиям:# программа получает на вход два числа.

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

И тут вы натыкаетесь на программу, которая была написана прошлым программистом и которая как раз решает такую задачу! Однако старший программист сказал вам немного переписать этот код, чтобы он не выглядел так ужасно. Да и вам самим становится, мягко говоря, не по себе от него.

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

ЧИТАТЬ ДАЛЕЕ …

Задача 4. Урок информатики 3

Наконец-то учитель смог объяснить детям, что такое эта «плавающая точка». Однако долго его радость не продлилась, ведь на следующем уроке нужно будет объяснить такие страшные слова, как «экспоненциальное», «мантисса» и «порядок». Хоть старшеклассники и знакомы с экспонентой, учитель всё равно не уверен, что здесь всё будет понятно. Поэтому для наглядности он также написал программу.
На вход подаётся строка — это экспоненциальная форма числа.

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

ЧИТАТЬ ДАЛЕЕ …

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

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

Пример:

Введите первое число: 102
Введите второе число: 123

Первое число наоборот: 201
Второе число наоборот: 321

Сумма: 522
Сумма наоборот: 225

ЧИТАТЬ ДАЛЕЕ …

Задача 2. Функция максимума

Юра пишет различные полезные функции для Питона, чтобы остальным программистам стало проще работать.
Он захотел написать функцию, которая будет находить максимум из перечисленных чисел. Функция для нахождения максимума из двух чисел у него уже есть. Юра задумался: может быть, её можно как-то использовать для нахождения максимума уже от трёх чисел?

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

ЧИТАТЬ ДАЛЕЕ …

Задача 1. Урок информатики 2

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

Задано положительное число x (x > 0). Ваша задача преобразовать его в формат плавающей точки, то есть x = a * 10 ** b, где 1 ≤ а < 10.

Обратите внимание, что x теперь больше нуля, а не больше единицы.
Обеспечьте контроль ввода.

Пример 1:
Введите число: 92345
Формат плавающей точки: x = 9.2345 * 10 ** 4

Пример 2:
Введите число: 0.0012
Формат плавающей точки: x = 1.2 * 10 ** -3

Решение:

number = float(input("Введите число: "))
b = 0
if number <= 1:
  while number <= 1:
    number *= 10
    b -= 1
    #print(number, b)
elif number >= 10:
  while number >= 10:
    number /= 10
    b += 1

print("Формат плавающей точки: x = ", number, "* 10 ** " + str(b))


Задача 10 — Напишите игру — текстовый квест

Напишите игру — текстовый квест.
Игрок находится в квартире, его задача — покинуть ее.
Игрок свободно перемещается по квартире, пока не покинет ее.
В квартире есть три комнаты (спальня, кухня, ванна) и коридор. В ванну можно попасть из коридора и спальни. В спальню можно попасть из ванны и коридора. На кухню можно попасть только из коридора. Коридор связан со всеми комнатами, но в нем дополнительно есть дверь наружу. На кухне открыто окно. Если игрок пытается выбраться через него, то разбивается и проигрывает

Пример:
Вы в спальне. Куда идем?
1 — в ванну
2 — в коридор
2

Вы в коридоре. Куда идем?
1 — в спальню
2 — в ванну
3 — на кухню
4 — в дверь
2

Вы в ванне. Куда идем?
1 — в коридор
2 — в спальню
2

Вы в спальне…

Решение:

# Вариант 1
def play_again():
  print('Хотите попробовать ещё разок?')
  while True:
    play = int(input('1 - Да\n2 - Нет\n'))
    if play == 1:
      run_game()
      break
    #elif play == 2:
    else:
      print('Игра закончена. Приходите поиграть ещё.')
      break

# Пришлось добавить обработку не цифр
def get_step(options):
  choise = 0
  while True:
    while True:
      try:
        choise = int(input('Куда пойти? '))
        break
      except Exception:
        print("Не верно указан маршрут. Попробуйте ещё раз.")
    if choise in options:
      break
  return choise


def bedroom():
  print('Вы в спалне. Перед вами 2 двери, куда идём:\n1 - в ванную\n2 - в каридор')
  door = get_step([1, 2])
  if door == 1:
    bathroom()
  #elif door == 2:
  else:
    coridors()


def kitchen():
  print('Вы на кухне. Перед вами каридор и окно, куда идём:\n1 - в каридор\n2 - в окно')
  door = get_step([1, 2])
  if door == 1:
    coridors()
  #elif door == 2:
  else:
    print('Выход в окно был не обдумманым. Вы разбились.')
  play_again()


def coridors():
  print('Вы в коридоре. Куда идём?\n1 - в спальню\n2 - в ванну\n3 - на кухню\n4 - в дверь')
  door = get_step([1, 2, 3, 4])
  if door == 1:
    bedroom()
  elif door == 2:
    bathroom()
  elif door == 3:
    kitchen()
  elif door == 4:
    print('Вы открываете дверь. Удивительно, она не заперта! Вы выиграли.')
    play_again()


def bathroom():
  print('Вы в ванне. Куда идём?\n1 — в коридор\n2 — в спальню')
  door = get_step([1, 2])
  if door == 1:
    coridors()
  #elif door == 2:
  else:
    bedroom()


def run_game():
  print('Добро пожаловать в Квест.\nПеред вами 3 двери, куда идём:\n1 - в спальню\n2 - на кухню\n3 - в ванную')
  door = get_step([1, 2, 3])
  if door == 1:
    bedroom()
  elif door == 2:
    kitchen()
  else:
    bathroom()

run_game()



И ещё одно решение:

# Вариант 2
level = {
  0:('Вы в незнакомой квартире. И вам нужно выбраться', {'осмотреться':1}),
  1:('Вы в спальне. Куда пойти?', {'в ванную':2, 'в коридор':4}),
  2:('Вы в ванной. Куда пойти?', {'в спальню':1, 'в коридор':4}),
  3:('Вы на кухне. Здесь есть окно. Куда пойти?', {'в окно':5, 'в коридор':4}),
  4:('Вы в коридоре. Куда пойти?', {'в ванную':2, 'в спальню':1, 'на кухню':3, 'в дверь':6}),
  5:('Вы разбиваете окно, выпрыгиваете в него и падаете. Причем долго - этаж был далеко не первый. Вы проиграли.', {'заново?':0}),
  6:('Вы открываете дверь. Удивительно, она не заперта! Вы выиграли.', {'заново?':0})
  }

def change(lvl):
    play_again = True
    a, b, c = level[lvl], {}, 1
    print(a[0])
    for i in a[1]:
        print('%s - %s' % (c, i))
        b[str(c)], c = a[1][i], c + 1
    while 1:
        d = input()
        if d in b:
          break
        elif d == '0':
          play_again = False
          break
        else:
          print('Неправильно набран номер!')
    if play_again:
      change(b[d])

change(0)


Задача 9. Недоделка

Вы пришли на работу в контору по разработке игр, целевая аудитория которых — дети и их родители. У прошлого программиста было задание сделать две игры в одном приложении, чтобы пользователь мог выбирать одну из них. Однако программист, на место которого вы пришли, перед увольнением не успел сделать эту задачу и оставил только небольшой шаблон проекта.
Используя этот шаблон, реализуйте игры «Камень, ножницы, бумага» и «Угадай число».

Правила игры «Камень, ножницы, бумага»:
Программа запрашивает у пользователя строку и выводит победил он или проиграл.
Камень бьёт ножницы, ножницы режут бумагу, бумага кроет камень.

Правила игры “Угадай число”:
Программа запрашивает у пользователя число до тех пор, пока он его не отгадает.

Решение:

import random


def rock_paper_scissors():
  you_win = ' Вы проиграли.'
  comp_win = ' Вы проиграли.'
  stone_win = 'Камень бьет ножницы!'
  paper_win = 'Бумага оборачивает камень!'
  scissors_win = 'Ножницы режут бумагу!'
  possible_actions = ['камень', 'бумага', 'ножницы']
  computer_action = random.choice(possible_actions)

  user_action = int(input("Сделайте выбор — 1 - камень, 2 - бумага или 3 - ножницы: "))
  #user_action = possible_actions[user_action - 1]
  if user_action == 1:
    user_action = 'камень'
  elif user_action == 2:
    user_action = 'бумага'
  #elif user_action == 3:
  else:
    user_action = 'ножницы'

  print(f"Вы выбрали {user_action}, компьютер выбрал {computer_action}.")

  if user_action == computer_action:
    print(f'Оба пользователя выбрали {user_action}. Ничья!!')
  elif user_action == 'камень':
    if computer_action == 'ножницы':
      print(stone_win + you_win)
    else:
      print(paper_win + comp_win)
  elif user_action == 'бумага':
    if computer_action == 'камень':
      print(paper_win + you_win)
    else:
      print(scissors_win + comp_win)
  elif user_action == 'ножницы':
    if computer_action == 'бумага':
      print(scissors_win + you_win)
    else:
      print(stone_win + comp_win)

def guess_the_number():
  rnd_number = random.randint(1, 10)
  popitka = 0

  while True:
    user_number = int(input('Введите число (от 1 до 10): '))
    popitka += 1
    #if user_number != rnd_number:
    #  print('Не угадали. Попробуйте ещё раз!')
    if user_number > rnd_number:
      print('Число больше, чем нужно. Попробуйте ещё раз!')
    elif user_number < rnd_number:
      print('Число меньше, чем нужно. Попробуйте ещё раз!')
    elif user_number == rnd_number:
      break

  print(f'Вы угадали! Загаданное число было {rnd_number}. Число попыток: {popitka}')

def mainMenu():
  menu = 'В какую игру хотите выграть?\n1 - Камень, ножницы, бумага\n2 - Угадай число'
  print(menu)
  game = int(input('Ваш выбор: '))
  if game == 1:
    rock_paper_scissors()
  #elif game == 2:
  else:
    guess_the_number()

mainMenu()


Задача 8. НОД

Напишите функцию, вычисляющую наибольший общий делитель двух чисел.

Решение 1:

# Ленивый вариант
import math


first = int(input('Введите первое число: '))
second = int(input('Введите второе число: '))
print('НОД от {0} и до {1} равен {2}.'.format(first, second, \
      math.gcd(first, second)))


Решение 2:

# Со своей функцией
def get_gcd(a, b):
  gcd = 1
  for i in range(1,a+1):
    if a % i == 0 and b % i == 0:
      gcd = i
  return gcd


first = int(input('Введите первое число: '))
second = int(input('Введите второе число: '))
print('НОД от {0} и до {1} равен {2}.'.format(first, second, \
      get_gcd(first, second)))


Задача 7. Опять?

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

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

Решение:

def minimum_number():
  a = int(input('Введите первое число: '))
  b = int(input('Введите второе число: '))
  minimum = (a + b - abs(a - b)) // 2
  print('Минимальное число: ', minimum)

minimum_number()


Задача 6. Монетка

Практиканту дали задание найти старую металлическую монетку по заданным координатам. Металлоискатель сканирует местность вокруг пользователя и при обнаружении/отсутствии металла прибор отображает на экране соответствующее сообщение.

Даны два действительных числа x и y. Напишите функцию, которая проверяет, принадлежит ли точка с координатами (x,y) заштрихованному квадрату (включая его границу). Если точка принадлежит квадрату, выведите сообщение “Монетка где-то рядом”, иначе выведите сообщение “Монетки в области нет”.

На рисунке сетка проведена с шагом 1.

Задача 6. Монетка

Решение:

def check_coordinate(x, y):
  if abs(x) > area or abs(y) > area:
    print('Монетки в области нет.')
  else:
    print('Монетка где-то рядом.')

area = 1

coordinate_x = int(input('Введите координату X: '))
coordinate_y = int(input('Введите координату Y: '))
check_coordinate(coordinate_x, coordinate_y)