Задача 4. Крест

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

Задача 4. Крест


(Символы выводятся по диагоналям воображаемого квадрата.)

Решение:

size = int(input('Введите размер квадрата: '))

for row in range(size):
  for col in range(size):
    if col == row or col == -row + size - 1:
      print('^', end = '')
    else:
      print(' ', end = '')
  print()


Задача 3. Рамка

Напишите программу, которая рисует с помощью символьной графики прямоугольную рамку. Для вертикальных линий используйте символ вертикального штриха “|”, а для горизонтальных — дефис “-”. Пусть пользователь вводит ширину и высоту рамки.

Задача 3. Рамка

Решение:

width = int(input('Введите ширину: ')) - 2
height = int(input('Введите высоту: '))
line = ''
simbol = ''

for row in range(1, height + 1):
  if (row == 1 or row == height):
    simbol = '-'
  else:
    simbol = ' '
  line = '|' + (simbol * width) + '|'
  print(line)


Задача 2. Лестница

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

Введите число: 5
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5

Решение:

end = int(input('Введите число: ')) + 1
line = '';

for row in range(end):
  line = str(row) + '\t'
  print(line * row)


Задача 1. Тестовое задание

Степан пришёл устраиваться на работу, где ему дали тестовое задание: проанализировать такую таблицу, понять как она строится и написать программу для вывода её на экран.

0 2 4 6  8  10
1 3 5 7  9  11
2 4 6 8  10 12
3 5 7 9  11 13
4 6 8 10 12 14
5 7 9 11 13 15

Помогите Степану реализовать такую программу. Подсказка: номера столбцов. А ещё не забудьте про литерал \t для табуляции.

Решение:

for row in range(6):
  for col in range(6):
    print(row + col * 2, end='\t')
  print()


Задача 10. Метод бутерброда

Секретное агентство «Super-Secret-no» решило для шифрования переписки своих сотрудников использовать «метод бутерброда». Сначала буквы слова нумеруются в таком порядке: первая буква получает номер 1, последняя буква — номер 2, вторая – номер 3, предпоследняя – номер 4, потом третья … и так для всех букв.
Затем все буквы записываются в шифр в порядке своих номеров.

Например, слово «sandwich» зашифруется в «shacnidw».
К сожалению, программист «Super-Secret-no», написал только программу шифрования и уволился. И теперь агенты не могут понять, что же они написали друг другу. Помогите им.

Пример:
Введите зашифрованное сообщение: shacnidw
Расшифрованное сообщение: sandwich

          1   3   5   7   8   6   4   2
 Слово: | s | a | n | d | w | i | c | h |
 Шифр:  | s | h | a | c | n | i | d | w |

Решение:

text = input('Введите зашифрованое слово: ')
count = 0
left_part = ''
right_part = ''

for i in text:
  count += 1
  if (count % 2 == 1):
    left_part += i
  else:
    right_part = i + right_part

print('Расшифрованное сообщение:', left_part + right_part)


Задача 9. Коровы

Для коров есть 10 стойл. В каждом стойле разные условия для животных, поэтому и молока они дают по-разному. В первом стойле производят 2 литра в день, во втором 4, # в третьем — 6, потом 8, 10, 12, 14, 16, 18, 20.
Но коровы стоят не во всех стойлах. Свободные и занятые обозначаются строкой из букв a и b, где a — свободное стойло, b — занятое.

Пользователь вводит строку из 10 символов a и b.
Необходимо определить, сколько в итоге будет произведено молока за день.

Решение:

stall = input('Введите размещение коров: ').lower()
count = 0
milk = 0

# На случай, если недопечатали или перепечатали
if len(stall) < 10:
  stall = stall.ljust(10, 'b')
elif len(stall) > 10:
  stall = stall[:10]

for i in stall:
  count += 1
  if i == 'a':
    milk = milk + count * 2
  else:
    milk = milk + count * 0

print('Всего литров молока за день:', milk)


Задача 8. Колонтитул

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

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

Решение:

length = int(input('Введите длину колонтитула в символах: '))
mark = int(input('Введите количество восклицательных знаков: '))
tilde = (length - mark) // 2

if (length - mark) // 2 == 0:
  print('~' * tilde + '!' * mark + '~' * tilde)
else:
  print('~' * tilde + '!' * mark + '~' * (tilde + 1))


Задача 7. Великий и могучий

Паоло изучает русский язык: занимается по учебникам, читает книги, слушает музыку. Особенно Паоло понравилась книга “Преступление и наказание”. И ему стало интересно, какое можно найти самое длинное слово в этой книге, чтобы потом сравнить его с аналогом на своём языке.

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

Пример:
Введите текст: Меня зовут Петр
Длина самого длинного слова: 5

Решение:

# Не учитываются другие слова с такой же длинной, только первое нахождение
message = input('Введите текст: ')
count = 0
count_max = 0
long_word = 0
word = ''

for i in message:
  if i != " ":
    count += 1
    word += i
  else:
    count = 0
    word = ''
  if count > count_max:
    count_max = count
    long_word = word

print('Длина самого длинного слова {0} и это слово {1}.'.format(count_max, long_word))


Задача 6. Спецшифр

Два сотрудника спецслужб переписываются необычным шифром. Каждую букву они шифруют в виде строки, внутри которой есть длинная последовательность букв “s”, а длина самой длинной — это и есть номер буквы алфавита, которую хотят отправить.

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

Пример:
Введите строку: ssbbbsssbc
Самая длинная последовательность: 3

Решение:

message = input('Введите сообщение: ').lower()
count_simbol = 0
count_max = 0

for i in message:
  if i == "s":
    count_simbol += 1
    if count_simbol > count_max:
      count_max = count_simbol
  else:
    count_simbol = 0

print(count_max)


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