Estas son las lecciones que tratan aspectos de Python que he dejado de explicar en clase porque han quedado "viejos" o se pueden abordar de una forma más "moderna".
La función print() muestra los argumentos separados por espacios, lo que a veces no es conveniente. En el ejemplo siguiente el signo de exclamación se muestra separado de la palabra.
nombre = "Pepe"
print("¡Hola,", nombre, "!")
¡Hola, Pepe !
Antes de Python 3.6, que introdujo las cadenas "f", para eliminar ese espacio, se tenía que (y se puede seguir haciendo) concatenar texto y variables con el operador suma (+):
nombre = "Pepe"
print("¡Hola,", nombre + "!")
print("¡Hola, " + nombre + "!")
¡Hola, Pepe! ¡Hola, Pepe!
Pero hay que tener cuidado, porque no se pueden concatenar cadenas y números con el operador suma (+):
fecha = 2020
print("¡Feliz " + fecha + "!")
Traceback (most recent call last):
File "ejemplo.py", line 2, in <module>
print("¡Feliz " + fecha + "!")
TypeError: Can't convert 'int' object to str
implicitly
En este caso, hay que convertir los números a cadenas con la función str() antes de concatenarlos:
fecha = 2020
print("¡Feliz", fecha, "!")
print("¡Feliz", str(fecha) + "!")
print("¡Feliz " + str(fecha) + "!")
¡Feliz 2020 ! ¡Feliz 2020! ¡Feliz 2020!
La función input() sólo puede tener un argumento. En versiones de Python anteriores a la versión 3.6 esto causaba problemas como en el ejemplo siguiente, en el que se quiere mostrar la respuesta de la primera instrucción en la segunda pregunta:
nombre = input("Dígame su nombre: ")
apellido = input("Dígame su apellido, ", nombre, ": ")
print("Me alegro de conocerle,", nombre, apellido)
Dígame su nombre: Pepito Traceback (most recent call last): File "ejemplo.py", line 2, in <module> apellido = input("Dígame su apellido, ", nombre, ": ") TypeError: input expected at most 1 arguments, got 3
Este problema se puede resolver de varias maneras:
nombre = input("Dígame su nombre: ")
print("Dígame su apellido,", nombre, ": ", end="")
apellido = input()
print("Me alegro de conocerle,", nombre, apellido)
Dígame su nombre: Pepito Dígame su apellido, Pepito : Conejo Me alegro de conocerle, Pepito Conejo
Si se quiere que los dos puntos (:) salgan pegados al nombre habría que utilizar la concatenación (operador +):
nombre = input("Dígame su nombre: ")
print("Dígame su apellido,", nombre + ": ", end="")
apellido = input()
print("Me alegro de conocerle,", nombre, apellido)
Dígame su nombre: Pepito Dígame su apellido, Pepito: Conejo Me alegro de conocerle, Pepito Conejo
Otra solución que permite incluir la pregunta en la recogida de la respuesta es utilizar la concatenación (operador +):
nombre = input("Dígame su nombre: ")
apellido = input("Dígame su apellido, " + nombre + ": ")
print("Me alegro de conocerle,", nombre, apellido)
Dígame su nombre: Pepito Dígame su apellido, Pepito: Conejo Me alegro de conocerle, Pepito Conejo
Si se opta por esta solución, hay que tener en cuenta que, en caso de querer concatenar cadenas y números, se debe utilizar la función str(), como se comenta en el apartado anterior:
numero1 = int(input("Dígame un número: "))
numero2 = int(input("Dígame un número mayor que " + numero1 + ": "))
print("La diferencia entre ellos es", numero2 - numero1)
Dígame un número: 5 Traceback (most recent call last): File "ejemplo.py", line 2, in <module> numero2 = int(input("Dígame un número mayor que " + numero1 + ": ")) TypeError: Can't convert 'int' object to str implicitly
numero1 = int(input("Dígame un número: "))
numero2 = int(input("Dígame un número mayor que " + str(numero1) + ": "))
print("La diferencia entre ellos es", numero2 - numero1)
Dígame un número: 5 Dígame un número mayor que 5: 8 La diferencia entre ellos es 3
La solución más sencilla, a partir de Python 3.6, es utilizar las cadenas "f":
nombre = input("Dígame su nombre: ")
apellido = input(f"Dígame su apellido, {nombre}: ")
print(f"Me alegro de conocerle, {nombre} {apellido}")
Dígame su nombre: Pepito Dígame su apellido, Pepito: Conejo Me alegro de conocerle, Pepito Conejo
numero1 = int(input("Dígame un número: "))
numero2 = int(input(f"Dígame un número mayor que {numero1}: "))
print(f"La diferencia entre ellos es {numero2 - numero1}")
Dígame un número: 5 Dígame un número mayor que 5: 8 La diferencia entre ellos es 3