Не понимаю, почему print (char + int) вызывает ошибку

fname3 = input("Enter the Blue print name: ")
import re
with open (fname3) as file:
    fileText=file.read()
q1,q2,q3 = [ int(n) for n in re.findall(": (\d+)",fileText) ]
p1,p2,p3 = re.findall("(.*):",fileText)
qb=q1+q2
qc=q1+q2+q3

print("This BLUEPRINT CONTAINS--------------|")
print(p1+" Questions: "+q1)

Этот код выше дает ошибку строки: print(p1+" Questions: "+q1), но print(p1+" Questions: "+p1) дает правильный вывод abd также print("q1"), но их объединение выдает ошибку

, но дает ошибку [115 ] Этот код открывает текстовый файл, который содержит следующее:

Part A: 12 10*2 = 20
Part B: 6 4*5 = 20
Part C: 5 3*10 = 30
-1
задан 18.03.2019, 12:15

3 ответа

Еще один способ сделать это с помощью так называемых f-строк (доступно в Python 3.6+, но последняя версия 3.7):

print (f"{p1} Questions: {q1}")

Обратите внимание, как f перед кавычками (относится ко всем типам кавычек), и любая переменная, которую вы хотите, должна быть в {}

0
ответ дан 08.05.2019, 17:29
  • 1
    Так " f" автоматически преобразование типов? – Appries 18.03.2019, 11:06
  • 2
    Да, и также делает код намного более чистым – Levi Lesches 18.03.2019, 11:14
  • 3
    Да.... спасибо, может Вы объяснять что точно " f" делает – Appries 18.03.2019, 11:21
  • 4
    Ну, если Вы понимаете str.format метод, это - в основном стенография. Например, print (num.format (",")) распечатает num с запятыми, где соответствующий (который мог бы отличаться за пределами Америки). Однако print (f"{num:,}") делает его очевидным, что num what' s быть распечатанным и что-либо после эти : передается str.format. Кроме того, это помогает избежать противных пробелов, о которых забывают при использовании +, поскольку Вы видите его явно. Щелчок для получения дополнительной информации – Levi Lesches 18.03.2019, 11:25
  • 5
    @EddeAlmeida это возвращается HTMLCollection не NodeList ( касательно ). Посмотрите работу демонстрация – zgood 29.03.2019, 07:56

Проблема в типах ваших переменных.

Questions:, p1, p2 и p3 относятся к типу str.

И наоборот, q1, q2 и q3 относятся к типу int.

Вызовы print работают отдельно, потому что print может преобразовать свои аргументы в str. Однако сначала вы пытаетесь добавить две строки (p1 и Questions:) в int (q2), что не помогает.

Вместо наивного сложения / объединения следует предпочесть str.format вызовов:

print('{p} Questions: {q}'.format(p=p1, q=q1))

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

0
ответ дан 08.05.2019, 17:29
  • 1
    да... это работало – Appries 18.03.2019, 11:09
  • 2
    @Appries, если мой ответ помог Вам, принимают его – gmds 18.03.2019, 11:10
  • 3
    другой ответ, которому ответили на первые работы и так как он дал ответ, 1-й, я отметил его, я дал upvote. – Appries 18.03.2019, 11:14
  • 4
    Хорошо, благодарит исправить меня, @zgood. Так или иначе это не массив, как Вы сказали. Это - подобное массиву как ссылка, которую Вы упомянули, говорит. – Ed de Almeida 29.03.2019, 08:04

Python - строго типизированный язык. В большинстве случаев он не выполняет никаких неявных преобразований типов. Подумайте, должно ли "5" +7 быть 12 или "57"? Как насчет 7+ «5»?

В неоднозначных случаях, подобных этому, Python просто выдаст ошибку, а не попытается угадать, что вы имели в виду.

Вам необходимо выполнить преобразование типа явно:

print(p1+" Questions: "+str(q1))

или с помощью Python 3 f-string:

print(f"{p1} Questions: {q1}")

или функция печати принимает несколько аргументов, которые по умолчанию будут , разделенные пробелом:

print(p1, "Questions:", q1)
0
ответ дан 08.05.2019, 17:29
  • 1
    Спасибо. При присвоении типов данных столбца, как я обработал бы даты? Я в настоящее время форматирую даты для соответствия “short дате “ в Excel с помощью % #m/dd / % Y, но, когда я открываю вывод в Excel, дата является “general “ не короткая дата. Это вызывает проблемы позже в будущем при выполнении макросов Excel в нисходящем направлении, которые используют дату (сообщите мне, имеет ли это смысл). – pes04 29.03.2019, 07:48

Теги

Похожие вопросы