📜 Классический подход из практикума
Исходные решения используют явные циклы, флаги и ручную сборку строк. Это помогает понять, как работает алгоритм «под капотом».
ASCII через цикл и флаг
text = input("Введите текст: ")
all_ascii = True
for char in text:
if ord(char) > 127:
all_ascii = False
break
print("Все символы ASCII:", all_ascii)
Сборка строки из диапазона Unicode
start = int(input("Введите начальный код: "))
end = int(input("Введите конечный код: "))
result = ""
for code in range(start, end + 1):
result += chr(code)
print("Символы:", result)
Вывод символов через пробел
text = input("Введите строку: ")
for i in range(len(text)):
if i == len(text) - 1:
print(text[i], end="")
else:
print(text[i], end=" ")
✅ Рекомендуемый современный вариант
1. ASCII через str.isascii()
text = input("Введите текст: ")
print("Все символы ASCII:", text.isascii())
2. ASCII через all()
Если нужно оставить явную проверку кодов, можно заменить цикл + флаг на all():
text = input("Введите текст: ")
print("Все символы ASCII:", all(ord(c) < 128 for c in text))
3. Строка из диапазона Unicode через join()
start = int(input("Введите начальный код: "))
end = int(input("Введите конечный код: "))
result = "".join(chr(code) for code in range(start, end + 1))
print("Символы:", result)
4. Символы через пробел через print(*text, sep=" ")
text = input("Введите строку: ")
print(*text, sep=" ")
5. Палиндром через isalpha() + lower()
text = input("Введите строку: ")
filtered = "".join(char.lower() for char in text if char.isalpha())
print("Палиндром?", filtered == filtered[::-1])
6. Уникальные символы через set
str1 = input("Введите первую строку: ")
str2 = input("Введите вторую строку: ")
len1 = len(set(str1))
len2 = len(set(str2))
if len1 > len2:
print("Больше уникальных символов в строке:", str1)
elif len1 < len2:
print("Больше уникальных символов в строке:", str2)
else:
print("Количество уникальных символов одинаковое.")
- Меньше кода — меньше возможностей для off-by-one ошибок.
- Используются оптимизированные встроенные методы и функции.
str.join()и генераторные выражения работают быстрее, чем конкатенация в цикле.- Множества
setавтоматически убирают дубликаты.
🕰️ Когда классический подход всё ещё полезен
- На начальном этапе обучения — чтобы понять, как устроен алгоритм.
- Когда нужно явно контролировать каждую итерацию и ранний выход.
- В задачах, где важен именно процесс перебора, а не результат.
Даже в этих случаях стоит знать современные альтернативы и применять их там, где они не скрывают логику.
🔧 Как распознать устаревший код
В legacy-проектах можно встретить конструкции вида:
result = ""
for char in text:
if condition:
result += char
Если условие простое, безопасно замените на:
result = "".join(char for char in text if condition)
Если нужна проверка «все ли» через цикл + флаг, используйте:
if all(condition for char in text):
...
str.isascii(), функции all(), set(), генераторные выражения и распаковка аргументов * выходят за рамки исходной практики. Подробности — в разделе Ресурсы.