Tengo el siguiente bit de código:
def test(): fragment = '' fragment = raw_input('Enter input') while fragment not in string.ascii_letters: fragment = raw_input('Invalid character entered, try again: ') fragment.upper() print fragment*3
Sin embargo, cuando lo ejecuto, por ejemplo, para un valor de entrada de p
, el fragment
se imprime como ‘ppp’ – todo en minúscula, es decir, la línea fragment.upper()
no se ejecuta. Lo mismo ocurre si sustituyo esa línea con string.upper(fragment)
(y al agregar una cadena de importación al principio). ¿Alguien puede decirme lo que estoy haciendo mal?
Las cuerdas son inmutables . Por lo tanto, funciones como str.upper()
no modificarán la str
sino que devolverán una nueva cadena.
>>> name = "xyz" >>> name.upper() 'XYZ' >>> print name xyz # Notice that it's still in lower case. >>> name_upper = name.upper() >>> print name_upper XYZ
Entonces, en lugar de fragment.upper()
en tu código, necesitas hacer new_variable = fragment.upper()
y luego usar esta new_variable
.
No se está dando cuenta de que las cadenas en Python son inmutables y que los métodos y operaciones de cadenas devuelven cadenas nuevas.
>>> print 'ppp'.upper() PPP
La cadena es un objeto inmutable, así que cuando llamas
string.upper()
Python haría una copia de la cadena, y cuando vuelvas a llamar
print string
, sería la cadena original, que está en minúscula. Así que cuando necesites su versión en mayúsculas, tienes que decir:
print string.upper()