Python

Ещё одна задача на Python? Решить нужно через for

У нас есть квадратный конверт размера 12х12 сантиметров и письмо на квадратном листе бумаги, которое не помещается в конверт. Напишите программу, которая подскажет сколько раз нужно сложить письмо пополам, чтобы оно поместилось в конверт. Размеры письма вводятся с клавиатуры.
Решить нужно через for
Stas Sidelnikov
Stas Sidelnikov
85
Ошибаешься: это НЕ нужно решать через for.

import math
print(2 * math.ceil(math.log2(int(input()) / 12)))

Но если преподаватель требует говнокодить и использовать цикл, то:

n, c = int(input()), 0
while n > 12: n, c = n / 2, c + 2
print(c)

Решать же эту задачу через for - это уже не говнокод, а удаление гланд через жопу.
Александр Евдокимов
Александр Евдокимов
97 916
Лучший ответ
Антоша Чехонте может вы не можете просто?
size = int(input('Введите размер письма: '))
fold = 0
for i in range(size):
if size <= 12:
break
size = size/2
fold += 2
print('Нужно сложить письмо пополам', fold)
sheet = int(input('Введите данные: '))

envelope = 12


for i in range(1,sheet//envelope):

sheet //= 2

if envelope >= sheet:

print("Нужно сложить лист:", i*2)

break
Год спустя) Может кому еще понадобится

sheet = int(input('Введите размер письма: '))
envelope = int(input('Введите размер конверта: '))
ratio = sheet // envelope
fold = 0
# if sheet == envelope:
# fold -= 2
# print('Лист спокойно входит в конверт.')
for i in range(ratio):
sheet /= 2
fold += 2
if sheet <= envelope:
break
print('Лист надо сложить', fold, 'раз(а)')
Иван Маштаков Однако странно. Сам пытался решить эту задачу, и у меня при письме 96см он складывает 6 раз, но не должен ли он складывать его 8 раз, или я совсем туп в математике? Просто у вас в ответе тоже 6 получается
# решение через while

side_letter = int(input('Введите размер стороны листа: '))
envelope = 12
count_fold = 0
while envelope < side_letter:
if envelope < side_letter:
side_letter = side_letter / 2
count_fold += 2
print('Складывать', count_fold, 'раз и оно войдет в конверт 12*12')


# решение через for

side_letter = int(input('Укажите размер стороны письма: '))
count_fold = 0
envelope = 12
for i in range(side_letter, 12, - 2):
if envelope < side_letter:
side_letter = side_letter / 2
count_fold += 2
print('Письмо сложим', count_fold, 'раз и оно войдет в конверт 12*12')