Почему комментарии мешают моей программе?

#python #syntax-error #user-input #sys #unicode-escapes

#python #синтаксическая ошибка #пользовательский ввод #система #unicode-экранирует

Вопрос:

Наши школьные задачи — добавить тестовый пример программы в нижней части кода с:

 #example

"""

<insert example of you running the code>

"""
  

но когда я это делаю, я получаю ошибку. Я никогда не получаю это ни в каких других кодах, только в этом?:

 C:UsersDavid>C:UsersDavidDesktopIN1900uke38qerror.py 1
  File "C:UsersDavidDesktopIN1900uke38qerror.py", line 22
    """
    ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated UXXXXXXXX escape

C:UsersDavid>
  

Мой код выглядит следующим образом:

 from math import sqrt
import sys

a=float(sys.argv[1])
b=float(sys.argv[2])
c=float(sys.argv[3])
d=(b**2)-(4*a*c)
x1=((-b sqrt(d))/(2*a))
x2=((-b-sqrt(d))/(2*a))

print(f'The quadratic formula with used values gives two roots {x1:.1f} and {x2:.1f}')

#example
"""
#Fra command prompt:
#C:UsersDavid>C:UsersDavidDesktopIN1900uke38quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
  

Комментарии:

1. Строки в тройных кавычках — это не комментарии, а многострочные строки. В Python комментарии начинаются с # .

Ответ №1:

Часть вашего строкового литерала интерпретируется как экранированный символ Юникода. Такие escape-последовательности начинаются с U . Самое простое решение для этого — поставить r перед открывающим триплетом двойных кавычек. Это предотвращает любую экранирующую обработку текста:

 r"""
#Fra command prompt:
#C:UsersDavid>C:UsersDavidDesktopIN1900uke38quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
  

Это намного проще, чем добавлять кучу дополнительных косых черт, и также не меняет удобочитаемость текста.

Вот что говорится в документах Python 3 о «необработанных строках»:

Литералы string и bytes могут необязательно иметь префикс буквы ‘r’ или ‘R’; такие строки называются необработанными строками и обрабатывают обратную косую черту как литеральные символы. В результате в строковых литералах экранирование ‘U’ и ‘ u’ в необработанных строках не обрабатывается специально. Учитывая, что необработанные литералы unicode в Python 2.x ведут себя иначе, чем в Python 3.x, синтаксис ‘ur’ не поддерживается.

Комментарии:

1. Это отключает большую часть escape-обработки для следующего строкового литерала. Смотрите следующее: docs.python.org/2.0/ref/strings.html — Обратите внимание, что тот факт, что это строка документа, не имеет никакого отношения к происходящему. Помещение r перед любым другим строковым литералом имеет тот же эффект.

2. Я только что понял, что ссылка, которую я указал выше, действительно старая. Вот где вы можете прочитать об этом r в документах Python 3: docs.python.org/3/reference/lexical_analysis.html — смотрите выше, где я добавил соответствующую часть этой страницы к своему ответу.

Ответ №2:

Используйте двойные черные косые черты в строке с путем, вот так:

 """
"""
#Fra command prompt:
#C:\Users\David>C:\Users\David\Desktop\IN1900\uke38\quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
"""
  

Комментарии:

1. в качестве альтернативы вы можете поместить r перед строкой, чтобы прочитать ее как raw строку, без специальных ` символов

Ответ №3:

U Или u в Users и uke38 интерпретируется как экранирование в Юникоде. Удвойте обратную косую черту.

 #C:\UsersDavid>C:\UsersDavidDesktopIN1900\uke38quadratic_roots_cml.py 1 0 -1
  

Кроме того, обратите внимание, что у вас есть комментарии в строках, начинающихся с # . Итак, тройные кавычки не нужны.

 ...
print(f'The quadratic formula with used values gives two roots {x1:.1f} and {x2:.1f}')

#example
#Fra command prompt:
#C:UsersDavid>C:UsersDavidDesktopIN1900uke38quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker