4 Pregunta: No entiendo por qué print (char + int) causa un error

pregunta creada en Sun, Mar 17, 2019 12:00 AM
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)

Este código de arriba está dando un error de línea: print(p1+" Questions: "+q1) pero print(p1+" Questions: "+p1) está dando salida correcta y también print("q1") pero combinándolos está generando un error

pero da error print("questions: "+q1) Este código abre un archivo de texto que contiene lo siguiente:

Part A: 12 10*2 = 20
Part B: 6 4*5 = 20
Part C: 5 3*10 = 30
    
- 1
  1. "Este código anterior está generando un error de línea ..." : publique el registro completo y específico que recibe directamente en su pregunta.
    2019-03-17 22: 59: 40Z
  2. @ ChristianDeanI no te entendió, la última línea, es decir, la impresión (p1 + "Preguntas:" + q1) está dando error
    2019-03-17 23: 02: 28Z
  3. Si obtienes un error, Python te da un traceback , una lista de errores. Por favor, publique esos en su pregunta.
    2019-03-17 23: 03: 45Z
  4. Sí, y debe dar un ejemplo reproducible mínimo mostrando qué error. También busca en Google tus mensajes de error.
    2019-03-17 23: 03: 51Z
  5. 2019-03-17 23: 04: 25Z
4 Respuestas                              4                         

Otra forma de hacerlo es con algo llamado f-strings (disponible en Python 3.6+, pero la última versión es 3.7):

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

Observe cómo hay un f antes de las comillas (se aplica a todos los tipos de comillas), y cualquier variable que desee debe estar en {}

    
1
2019-03-17 23: 03: 56Z
  1. ¿Entonces la "f" hace automáticamente la conversión de tipo?
    2019-03-17 23: 06: 00Z
  2. Sí, y también hace que el código sea mucho más limpio
    2019-03-17 23: 14: 46Z
  3. Sí .... gracias, ¿puede explicar qué hace exactamente la "f"
    2019-03-17 23: 21: 48Z
  4. Bueno, si comprende el método str.format, esto es básicamente una taquigrafía. Por ejemplo, print (num.format (",")) imprimirá num con comas cuando sea apropiado (que puede diferir fuera de los Estados Unidos). Sin embargo, print (f"{num:,}") hace obvio que num es lo que se está imprimiendo y nada después del 06003509911110010105050 se transfiere al 0600350991111111110101010105050. También ayuda a evitar los espacios molestos que se olvidan cuando se usa el 060035099111111111010101010105050. También ayuda a evitar los espacios molestos que se olvidan cuando se utiliza el 060035099111111101010101010105050. También ayuda a evitar los espacios molestos que se olvidan cuando se utiliza el número 06003509911. Haga clic para obtener más detalles
    2019-03-17 23: 25: 58Z

Debes convertir a una cadena con ::

str.format

Alternativamente, simplemente use múltiples argumentos cuando llame al +:

str

Tenga en cuenta que los espacios se agregan automáticamente con este método.

    
1
2019-03-17 23: 01: 09Z

El problema está en los tipos de sus variables.

print(p1 + " Questions: " + str(q1))
, print,
print(p1, "Questions:", q1)
y Questions: son todos de tipo 06003509911001010105050.

Por el contrario, p1, p2 y p3 son del tipo str.

Las llamadas q1 funcionan por separado, ya que puede convertir sus argumentos en 06003509911110010105050. Sin embargo, primero está intentando agregar dos cadenas (060035099111110105035062 y 0600350991111).

En lugar de una ingenua adición /concatenación, debería preferir q2 llamadas:

q3

Esto hace que sea más fácil entender cómo se verá la cadena y realizar la conversión automática de tus argumentos.

    
1
2019-03-17 23: 04: 00Z
  1. sí ... funcionó
    2019-03-17 23: 09: 49Z
  2. @ Appries si mi respuesta te ayudó, acéptalo, por favor
    2019-03-17 23: 10: 37Z
  3. la otra respuesta a la que se contestó primero funciona y, desde que dio el ans 1, lo marqué, le di un voto positivo.
    2019-03-17 23: 14: 35Z

Python es un lenguaje fuertemente tipado. En la mayoría de los casos, no hace ninguna conversión de tipo implícita. Considere, ¿debería "5" +7 ser 12 o "57"? ¿Qué tal 7+ "5"?

En casos ambiguos como este, Python simplemente generará un error en lugar de intentar adivinar lo que quisiste decir.

Necesitas hacer la conversión de tipo explícitamente:

int

o con Python 3 f-string:

print

o la función de impresión acepta múltiples argumentos, que, de forma predeterminada, estarán separados por espacios:

print     
0
2019-03-18 01: 45: 33Z
str
fuente colocada aquí