Решение задания 1: Перевёрнутая лестница
height = int(input("Введите высоту лестницы: "))
for i in range(height, 0, -1):
print("*" * i)
Логика решения: range(height, 0, -1) генерирует числа от height до 1. Умножение строки "*" на число повторяет её нужное количество раз.
Решение задания 2: Проверка текста на ASCII
text = input("Введите текст: ")
all_ascii = True
for char in text:
if ord(char) > 127:
all_ascii = False
break
print("Все символы ASCII:", all_ascii)
Логика решения: флаг all_ascii остаётся истинным, пока не встретится символ с кодом больше 127. При первом же таком символе цикл прерывается — дальнейшая проверка не нужна.
print("Все символы ASCII:", text.isascii()) или print("Все символы ASCII:", all(ord(c) < 128 for c in text)).
Решение задания 3: Вывод строки с интервалами
text = input("Введите строку: ")
for i in range(len(text)):
if i == len(text) - 1:
print(text[i], end="")
else:
print(text[i], end=" ")
Логика решения: для всех символов, кроме последнего, печатаем пробел после символа. Для последнего символа используем end="", чтобы не было завершающего пробела.
print(*text, sep=" ") — распаковка символов и параметр sep автоматически ставят одиночные пробелы между ними.
Решение задания 4: Проверка скобок
text = input("Введите строку: ")
balance = 0
for char in text:
if char == "(":
balance += 1
elif char == ")":
balance -= 1
if balance < 0:
break
print("Скобки расставлены правильно?", balance == 0)
Логика решения: открывающая скобка увеличивает баланс, закрывающая — уменьшает. Если баланс становится отрицательным, закрывающих скобок стало больше, чем открывающих, и дальнейший перебор не имеет смысла.
Решение задания 5: Поиск минимального символа
text = input("Введите строку: ")
min_char = text[0]
for char in text:
if ord(char) < ord(min_char):
min_char = char
print("Минимальный символ:", min_char)
Логика решения: начинаем с первого символа как с минимального. На каждой итерации сравниваем код текущего символа с кодом найденного минимума и обновляем при необходимости.
Решение задания 6: Чётные и нечётные цифры
number = input("Введите число: ")
even_digits = ""
odd_digits = ""
for digit in number:
if int(digit) % 2 == 0:
even_digits += digit
else:
odd_digits += digit
even_digits = even_digits if even_digits else "0"
odd_digits = odd_digits if odd_digits else "0"
print("Число из чётных цифр:", even_digits)
print("Число из нечётных цифр:", odd_digits)
Логика решения: цифры читаются как строка, чтобы перебирать посимвольно. Чётность проверяется через % 2. Если одна из групп осталась пустой, заменяем её на строку "0".
Решение задания 7: Строка из диапазона Unicode
start = int(input("Введите начальный код: "))
end = int(input("Введите конечный код: "))
result = ""
for code in range(start, end + 1):
result += chr(code)
print("Символы:", result)
Логика решения: диапазон range(start, end + 1) включает конечный код. Каждый код преобразуется в символ и добавляется к результату.
result = "".join(chr(code) for code in range(start, end + 1)) — быстрее и лаконичнее.
Решение задания 8: Длина слов
text = input("Введите строку: ")
word = ""
for char in text:
if char != " ":
word += char
else:
if word:
print(f"Слово: {word}, Длина: {len(word)}")
word = ""
if word:
print(f"Слово: {word}, Длина: {len(word)}")
Логика решения: собираем символы в word до тех пор, пока не встретится пробел. При пробеле выводим накопленное слово и сбрасываем word. После цикла отдельно обрабатываем последнее слово, если строка не заканчивается пробелом.
for word in text.split(): print(f"Слово: {word}, Длина: {len(word)}").
Решение задания 9: Текст палиндром
text = input("Введите строку: ")
filtered_text = ""
for char in text:
if ("A" <= char <= "Z") or ("a" <= char <= "z") or \
("А" <= char <= "Я") or ("а" <= char <= "я"):
if "A" <= char <= "Z":
char = chr(ord(char) + 32)
elif "А" <= char <= "Я":
char = chr(ord(char) + 32)
filtered_text += char
is_palindrome = filtered_text == filtered_text[::-1]
print("Палиндром?", is_palindrome)
Логика решения: оставляем только буквы английского и русского алфавитов, большие буквы приводим к строчным через сдвиг кода на 32. Затем сравниваем строку с её перевёрнутой копией.
filtered = "".join(char.lower() for char in text if char.isalpha()). Метод isalpha() принимает любые буквы, но для строгого соответствия исходной задаче лучше явно проверять диапазоны.
Решение задания 10: Все буквы алфавита
text = input("Введите строку: ")
contains_all = True
for code in range(ord("A"), ord("Z") + 1):
if chr(code) not in text and chr(code + 32) not in text:
contains_all = False
break
print("Содержит все буквы алфавита?", contains_all)
Логика решения: перебираем коды заглавных букв A..Z. Для каждой буквы проверяем, есть ли она в исходной строке в любом регистре. Если хотя бы одна буква отсутствует, ответ False.
print("Содержит все буквы алфавита?", set("abcdefghijklmnopqrstuvwxyz") <= set(text.lower())).
Решение задания 11: Сравнение строк на уникальность
str1 = input("Введите первую строку: ")
str2 = input("Введите вторую строку: ")
unique1 = ""
unique2 = ""
for char in str1:
if char not in unique1:
unique1 += char
for char in str2:
if char not in unique2:
unique2 += char
if len(unique1) > len(unique2):
print("Больше уникальных символов в строке:", str1)
elif len(unique1) < len(unique2):
print("Больше уникальных символов в строке:", str2)
else:
print("Количество уникальных символов одинаковое.")
Логика решения: в каждой строке накапливаем только те символы, которых ещё нет в строке уникальных символов. Затем сравниваем длины полученных строк.
len(set(str1)) и len(set(str2)) — множество автоматически хранит только уникальные элементы.
Решение задания 12: Счётчик символов
text = input("Введите строку: ")
letters = 0
digits = 0
others = 0
for char in text:
if "A" <= char <= "Z" or "a" <= char <= "z":
letters += 1
elif "0" <= char <= "9":
digits += 1
else:
others += 1
print("Букв:", letters)
print("Цифр:", digits)
print("Остальных символов:", others)
Логика решения: три аккумулятора-счётчика. Для каждого символа определяем его категорию по диапазону кодов и увеличиваем соответствующий счётчик.
sum(1 for c in text if c.isalpha()), sum(c.isdigit() for c in text) и len(text) - letters - digits.
Решение задания 13: Одинаковый сдвиг
str1 = input("Введите первую строку: ")
str2 = input("Введите вторую строку: ")
flag = True
if len(str1) != len(str2):
flag = False
else:
for i in range(len(str1) - 1):
if ord(str1[i]) - ord(str1[i + 1]) != ord(str2[i]) - ord(str2[i + 1]):
flag = False
break
print("Одинаковый сдвиг?", flag)
Логика решения: если длины строк различаются, ответ сразу False. Иначе сравниваем разности кодов соседних символов на одинаковых позициях. Если хотя бы одна разность не совпадает, ответ False.
flag = len(str1) == len(str2) and all(ord(str1[i]) - ord(str1[i + 1]) == ord(str2[i]) - ord(str2[i + 1]) for i in range(len(str1) - 1)).