Я начал изучать Python примерно месяц назад и решил попробовать Advent of Code, все шло нормально, но дошел до восьмого дня, когда мне пришлось подсчитать количество символов в строке, что довольно просто, но также подсчитать количество символов кода в строка, включающая кавычки и escape-символы, как показано в примерах:
-
Код: Выделить всё
"aaa\"aaa"-
Код: Выделить всё
"\x27"Я понятия не имел, как это сделать, потому что каждый раз, когда я пытался, Python всегда интерпретировал "\x27" как "'", поэтому, исчерпав все идеи, я решил посмотреть, какие способы другие люди использовали для решения этой проблемы, и одна вещь, которая часто использовалась, была eval(), я попытался используйте его в Python Shell, и он вызвал ошибку, однако, когда я по какой-то причине попробовал этот код, он вернул правильный результат:
Вот часть входного файла
Код: Выделить всё
with open('day8-matchsticks.txt', 'r', encoding='utf-8') as file:
lines = file.read().splitlines()
def count_chars(lines):
string_chars, code_chars = 0, 0
for line in lines:
code_chars += len(eval(line))
string_chars += len(line)
return string_chars - code_chars
print(count_chars(lines))
Если в интерактивной оболочке я попытаюсь передать строку "byc\x9dyxuafof\\\xa6uf\\axfozomj\\olh\x6a" в eval(), это выдаст SyntaxError: недопустимый непечатаемый символ U+009D, и если я наберу '\\' в "byc\x9dyxuafof\\\xa6uf\\axfozomj\\olh\x6a", он вернет False, но если я сделаю это внутри цикла, он напечатает True для того же самого предложения, я не понимаю, что здесь происходит.
*Кроме того, я забыл добавить эту печать line.count('\\') внутри цикла возвращает 9 для этого предложения, что означает, что были подсчитаны все обратные косые черты. Как это можно сделать, если обратные косые черты являются частью шестнадцатеричной записи?
Подробнее здесь: https://stackoverflow.com/questions/798 ... characters
Мобильная версия