Как eval() может получить количество escape-символов?Python

Программы на Python
Ответить
Anonymous
 Как eval() может получить количество escape-символов?

Сообщение Anonymous »

Я не уверен, относится ли это к устранению неполадок/отладке кода, но я не понимаю, почему он работает.
Я начал изучать Python примерно месяц назад и решил попробовать Advent of Code, все шло нормально, но дошел до восьмого дня, когда мне пришлось подсчитать количество символов в строке, что довольно просто, но также подсчитать количество символов кода в строка, включающая кавычки и escape-символы, как показано в примерах:
-

Код: Выделить всё

"aaa\"aaa"
— это 10 символов кода, но сама строка содержит шесть символов «a» и одну экранированную кавычку, всего 7 символов в строковых данных.
- состоит из 6 символов кода, но сама строка содержит только один — апостроф ('), экранированный с использованием шестнадцатеричной записи.
Я понятия не имел, как это сделать, потому что каждый раз, когда я пытался, Python всегда интерпретировал "\x27" как "'", поэтому, исчерпав все идеи, я решил посмотреть, какие способы другие люди использовали для решения этой проблемы, и одна вещь, которая часто использовалась, была eval(), я попытался используйте его в Python Shell, и он вызвал ошибку, однако, когда я по какой-то причине попробовал этот код, он вернул правильный результат:
Вот часть входного файла:

Код: Выделить всё

"qxfcsmh"
"ffsfyxbyuhqkpwatkjgudo"
"byc\x9dyxuafof\\\xa6uf\\axfozomj\\olh\x6a"
"jtqvz"
"uzezxa\"jgbmojtwyfbfguz"
"vqsremfk\x8fxiknektafj"
"wzntebpxnnt\"vqndz\"i\x47vvjqo\""
"higvez\"k\"riewqk"
"dlkrbhbrlfrp\\damiauyucwhty"
"d\""
А вот код:

Код: Выделить всё

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))
Меня не волнует правильность выполнения упражнения, если я его не понимаю, и в этом случае я все еще не знаю, почему eval() работает внутри цикла.
Если в интерактивной оболочке я попытаюсь передать строку "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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»