Задача 5. Марсоход 2

К роботу Валли отправили ещё одного робота Билли. Это его первый поход на Марс, поэтому он тестируется в прямоугольном помещении размером 15 на 20 метров. Марсоход высаживается в центре комнаты (в точке 8, 10), после чего управление им передаётся оператору — пользователю вашей программы.

Программа спрашивает в какую сторону оператор хочет направить робота: север (клавиша W), юг (клавиша S), запад (клавиша A) или восток (клавиша D).

Оператор делает выбор, марсоход перемещается на 1 метр в эту сторону и программа сообщает новую позицию марсохода. Если марсоход упёрся в стену, то он не должен пытаться перемещаться в сторону стены, в этом случае его позиция не меняется.

Пример:
[Программа]: Марсоход находится на позиции 6, 19, введите команду:
[Оператор]: A
[Программа]: Марсоход находится на позиции 5, 19, введите команду:
[Оператор]: W
[Программа]: Марсоход находится на позиции 5, 20, введите команду:
[Оператор]: W
[Программа]: Марсоход находится на позиции 5, 20, введите команду:

Решение:

x = 8
y = 10

while True:
  print('[Программа]: Марсоход находится на позиции {0}, {1}, введите команду: '.format(x, y))
  vector = input('[Оператор]: ').upper()
  if vector == 'W' or vector == 'Ц': y += 1
  if vector == 'S' or vector == 'Ы': y -= 1
  if vector == 'A' or vector == 'Ф': x -= 1
  if vector == 'D' or vector == 'В': x += 1
  if vector == '0': break
  if x > 15: x = 15
  if y > 20: y = 20
  if x < 0: x = 0
  if y < 0: y = 0


Задача 4. Театр

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

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

Сцена
Введите кол-во рядов: 5
Введите кол-во сидений ряду: 7
Введите кол-во метров между рядами: 3
======= *** =======
======= *** =======
======= *** =======
======= *** =======
======= *** =======

Решение:

row = int(input('Введите кол-во рядов: '))
col = int(input('Введите кол-во сидений в ряду: '))
margin = int(input('Введите кол-во метров между рядами: '))

# Хотя лучше собрать строку 1 раз и потом её выводить
for i in range(row):
  rows = '=' * col
  rows = rows + ' ' + '*' * margin + ' ' + rows
  print(rows)


Задача 3. Кривой мессенджер

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

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

Пример:
Введите текст: Пр*ивет как дела
Символ ‘*’ стоит на позиции 3

Решение:

# Но можно принт вынести за цикл и тогда будет вывод всегда
text = input('Введите текст: ')
count = 0

for i in text:
  count += 1
  if i == '*':
    print('Символ ‘*’ стоит на позиции:', count)
    break


Задача 2. Я стал новым пиратом!

Старому капитану необходимо пополнить команду. Но попадут на его корабль только достойные!
Он отобрал 10 человек и те, кто из них крикнет слово “Карамба”, попадут на борт.

Пользователь вводит 10 слов.
Напишите программу, которая определяет, сколько из них совпадают со словом “Карамба”.

Решение:

count = 0

for i in range(10):
  answer = input('Для зачисления в команду нужно назвать пароль: ').lower()
  if answer == 'карамба':
    count += 1

print('Команда пополнилась на {0} пирата.'.format(count))


Задача 1. Календарь

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

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

Пример:
Введите день недели: вторник
Номер дня недели: 2

Решение:

# Вариан 1 (Не очень удобный)
day = input('Введите день недели: ').lower()

if day == 'понедельник':
  print(1)
elif day == 'вторник':
  print(2)
elif day == 'среда':
  print(3)
elif day == 'четверг':
  print(4)
elif day == 'пятница':
  print(5)
elif day == 'суббота':
  print(6)
elif day == 'воскресенье':
  print(7)
else:
  print('Не верно указан нень недели.')


# Вариант 2
day = input('Введите день недели: ').lower()
answer = 'Не верно указан день недели.'
nubmer_day = {
  'понедельник': 1,
  'вторник': 2,
  'среда': 3,
  'четверг': 4,
  'пятница': 5,
  'суббота': 6,
  'воскресенье': 7
}

for key, val in nubmer_day.items():
  if key == day:
    answer = val

print(answer)


Задача 10. Кинотеатр

X мальчиков и Y девочек пошли в кинотеатр и купили билеты на подряд идущие места в одном ряду.

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

На вход подаются два числа — кол-во мальчиков X и кол-во девочек Y.
В ответе выведите какую-нибудь строку, в которой будет ровно X символов “B” (обозначающих мальчиков) и Y символов “G” (обозначающих девочек), удовлетворяющую условию задачи. Пробелы между символами выводить не нужно.
Если рассадить мальчиков и девочек согласно условию задачи невозможно, выведите строку “Нет решения”.

Пример 1:

Введите кол-во мальчиков: 5
Введите кол-во девочек: 5
Ответ: BGBGBGBGBG

Пример 2:

Введите кол-во мальчиков: 5
Введите кол-во девочек: 3
Ответ: BGBGBBGB

Пример 3:

Введите кол-во мальчиков: 100
Введите кол-во девочек: 1
Ответ: Нет решени

Решение:

boys = int(input('Введите кол-во мальчиков: '))
girls = int(input('Введите кол-во девочек: '))
answer = ''

if (boys > 2 * girls) or (girls > 2 * boys):
  print('Ответ: Нет решения.')
elif boys >= girls:
  k = boys - girls
  for bgb in range(k):
    answer += 'BGB'
  for bg in range(girls - k):
    answer += 'BG'
else:
  k = girls - boys
  for gbg in range(k):
    answer += 'GBG'
  for gb in range(boys - k):
    answer += 'GB'

if answer != '':
  print('Ответ:', answer)


Задача 9. Выражение

Дано число x.
Напишите программу для вычисления следующего выражения

((x-1)(x-3)(x-7)…(x-63)/
((x-2)(x-4)(x-8)…(x-64))

Решение:

x = int(input('Введите число X: '))
numerator = 1
denominator = 1

# range - (1)+2=(3)+3+1=(7)+7+1=(15)+15+1=(31)+31+1=(63)
# or - (2)-(4)-(8)-(16)-(32)-(64)
for num in range (1, 7):
  exp1 = (x - (2 ** num - 1))
  numerator *= exp1
  exp2 = (x - 2 ** num)
  denominator *= exp2
  #print('Числитель -', numerator, 'Знаменатель -', denominator)

if denominator == 0:
  print('На 0 делить нельзя!')
else:
  print(numerator / denominator)


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

Дано натуральное число N. Напишите программу для вычисления следующей суммы ряда (начиная с единицы).

S = 1 — 1/2 + 1/4 — 1/8 + … (-1)**N * 1/2**N

Решение:

nat = int(input('Введите натуральное число: '))
start = 1
sumRow = 0

for i in range(nat):
  sumRow += start
  start *= -1/2
  print(i, start, sumRow)

print(sumRow)


Задача 7. Стипендия

Ежемесячная стипендия студента составляет educational_grant руб., а расходы на проживание превышают стипендию и составляют expenses руб. в месяц. Рост цен ежемесячно увеличивает расходы на 3%, кроме первого месяца.

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

Решение:

educational_grant = int(input('Введите стипендию: '))
sumEd = 0 # Сумма дохода
expenses = int(input('Введите расходы: '))
sumEx = 0 # Сумма расхода
percent = 0 # В первый месяц не считаем

for mounth in range(0, 10):
  sumEd += educational_grant
  sumEx = sumEx + expenses + percent
  percent = sumEx * 3 / 100
  #print(mounth + 1, '-', sumEd, '/', sumEx)

print('у родителей попросить: ', round(sumEx - sumEd, 2))


Задача 6. Письмо

У нас есть квадратный конверт размера 12х12 сантиметров и письмо на квадратном листе бумаги, которое не помещается в конверт.

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

Решение:

length = int(input('Укажите размер письма: '))
step = length // 4
count = 0
size = 12

for i in range(length, 12, - step):
  if size < length:
    size *= 2
    count += 2

print(count)


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

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

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

Сама функция выглядит так: y = x**3 + 2x**2 — 4x + 1

Пример:
Введите начало отрезка: -2
Введите конец отрезка: 2
Введите шаг: -1
В точке 2 функция равна 9
В точке 1 функция равна 0
В точке 0 функция равна 1
В точке -1 функция равна 6
В точке -2 функция равна 9

Решение:

begin = int(input('Введите начало отрезка: '))
end = int(input('Введите конец отрезка: '))
step = int(input('Введите шаг: '))
function = 0

for i in range(end, begin - 1, step):
  function = i ** 3 + 2 * i ** 2 - 4 * i + 1
  print('В точке {0} функция равна {1}'.format(i, function))


Задача 4. Отрезок

Напишите программу, # которая считывает с клавиатуры два числа a и b, считает и выводит на консоль среднее арифметическое всех чисел из отрезка [a; b], которые кратны числу c.

Подсказка: (a и b являются промежутком, а c для проверки кратности).

Решение:

begin = int(input('Введите первое число: '))
end = int(input('Введите второе число: '))
multiplicity = 2
summ = 0
count = 0

for number in range(begin, end + 1):
  if number % multiplicity == 0:
    summ += number
    count += 1

print(summ / count)


Задача 3. Это будет бомба

Мы разрабатываем пошаговую игру по мотивам боевика. Игрок — главный герой и должен обезвредить бомбу, которая взорвётся через N секунд. Программа спрашивает пользователя хочет ли он обезвредить бомбу сейчас.
Если ответ “0” (то есть “нет”), то счетчик бомбы уменьшается. Если он достиг нуля, то программа выдаёт сообщение “Бомба взорвалась”, а если не достиг, то программа вновь переспрашивает, не хочет ли игрок обезвредить бомбу, и сообщает, сколько времени осталось до взрыва..
Если ответ “да”, то программа выводит на экран сообщение о том, что бомба обезврежена и сколько секунд оставалось до взрыва.

Используйте цикл for.

Решение:

beforeExplosion = int(input('Сколько секунд до взрыва: '))
remainder = 0

for i in range(beforeExplosion, 0, -1):
  print('До взрыва осталось {0} секунд.'.format(i))
  neutralize = int(input('Хотите обезвредить бомбу сейчас? (0 - нет, 1 - Да) '))
  if neutralize == 1 and i > 0:
    print('Бомба обезврежена. До взрыва оставалось {0} секунд.'.format(i))
    remainder = i
    break

if remainder == 0:
  print('Бомба взорвалась.')


Задача 2. Долги

МирПрогБанк наконец-то разделил законопослушных граждан и должников и поместил их в разные базы. Но банк не торопится как-то слишком сильно давить на возврат денег. Сейчас операторам банка дали задание позвонить каждому пятому должнику из списка (они нумеруются с нуля) и спросить, сколько примерно денег каждый из них задолжал банку.
Напишите программу, которая принимает на вход количество должников, затем спрашивает у каждого пятого (начиная с 0) его долг. В конце выводится общая сумма долгов.

Пример:

Введите количество должников: 13
Должник с номером 0
Сколько должны? 1000
Должник с номером 5
Сколько должны? 5000
Должник с номером 10
Сколько должны? 2000
Общая сумма долга: 8000


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

Задача 1. Космическая еда

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

Используйте цикл for.

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