Soy nuevo en la programación de Python. Estoy tratando de aprender acerca de las listas.

Quiero crear un nuevo programa que pueda convertir cada palabra en letras mayúsculas y minúsculas alternativamente en una oración.

Estoy atorado aqui:

input_text = "hello my name is rahul and i'm from india"
result = ""
myArr = input_text.split(' ')

for idx in range(len(myArr)):
  if idx % 2 == 0 :
    result = result + myArr[idx].upper()
  else:
    result = result + myArr[idx].lower()

print(str(result))

Con este código puedo obtener, por ejemplo:

input : "hello my name is rahul and i'm from india"
output : "HELLOmyNAMEisRAHULandI'MfromINDIA"

Pero lo que estoy tratando de obtener es:

input : "hello my name is rahul and i'm from india"
output : "HELLO my NAME is RAHUL and I'M from INDIA"

Quiero agregar un espacio a cada palabra en la oración.

2
workonprogress 11 ene. 2022 a las 07:33

6 respuestas

La mejor respuesta

Ya lo entendiste; la mejor manera de hacerlo es agregar las palabras en mayúsculas/minúsculas a una lista, luego usar .join() para convertir la lista de palabras en una cadena con cada palabra separada por un espacio:

input_text = "hello my name is rahul and i'm from india"
result = ""
myArr = input_text.split(' ')
words = []
for idx in range(len(myArr)):
  if idx % 2 == 0 :
    words.append(myArr[idx].upper())
  else:
    words.append(myArr[idx].lower())

result = ' '.join(words)
print(str(result))

Al contrario de lo que han sugerido otros respondedores, usar la concatenación repetida es una mala idea por razones de eficiencia.

4
BrokenBenchmark 11 ene. 2022 a las 07:38
1
¡Hey, gracias! funcionó, realmente me ayudó.
 – 
workonprogress
11 ene. 2022 a las 07:44

Usando una lista de comprensión podemos intentar:

input_text = "hello my name is rahul and i'm from india"
words = input_text.split()
output = ' '.join([x.upper() if ind % 2 == 0 else x for ind, x in enumerate(words)])
print(output)  # HELLO my NAME is RAHUL and I'M from INDIA
3
Tim Biegeleisen 11 ene. 2022 a las 07:41

Puede agregar todos los valores a una lista y finalmente unirlos usando str.join método.

input_text = "hello my name is rahul and i'm from india"
result = []
myArr = input_text.split(' ')

for idx in range(len(myArr)):
    if idx % 2 == 0:
        res = myArr[idx].upper()
    else:
        res = myArr[idx].lower()
    result.append(res)

print(" ".join(result))

Salida:

HELLO my NAME is RAHUL and I'M from INDIA
2
pppig 11 ene. 2022 a las 07:37
1
¡Hey, gracias! funcionó, realmente me ayudó.
 – 
workonprogress
11 ene. 2022 a las 07:44

Además de las otras respuestas, proporcioné otro tipo de respuestas aquí usando enumerate (ver https://www.geeksforgeeks.org/enumerate-in-python/), que repiten una lista (o tupla) con su índice:

input_text = "hello my name is rahul and i'm from india"

result = []
for idx, word in enumerate(input_text.split()):
    result.append(word.upper() if idx % 2 == 0 else word.lower())
print(' '.join(result))

La respuesta también puede ser más corta usando Comprensión de lista (consulte if/else en una lista de comprensión )

input_text = "hello my name is rahul and i'm from india"

result = [word.upper() if idx % 2 == 0 else word.lower() for idx, word in enumerate(input_text.split())]
print(' '.join(result))

Sería útil saberlo para tu vida de Python :)

2
Sangkeun Park 11 ene. 2022 a las 07:48

He agregado espacio donde está agregando a la lista:

input_text = "hello my name is rahul and i'm from india"
result = ""
myArr = input_text.split(' ')

for idx in range(len(myArr)):
    if idx % 2 == 0 :
        result = result + myArr[idx].upper() + " "  # added a space
    else:
        result = result + myArr[idx].lower() + " "  # added a space

print(str(result))

Esto da:

HELLO my NAME is RAHUL and I'M from INDIA 
1
Sibtain Reza 11 ene. 2022 a las 07:36
1
¡Hey, gracias! funcionó, realmente me ayudó.
 – 
workonprogress
11 ene. 2022 a las 07:44

Puede agregar un espacio al resultado después de agregar cada palabra, es decir

result = result + ' '

Esto también agregará un espacio al final de la cadena, lo que puede no ser deseable. Puede eliminarlo con la función rstrip():

result = result.rstrip()

Por cierto, el resultado ya es una cadena, por lo que no necesita convertirlo en una cadena para la declaración de impresión.

Entonces, ponlo todo junto:

input_text = "hello my name is rahul and i'm from india"
result = ""
myArr = input_text.split(' ')

for idx in range(len(myArr)):
  if idx % 2 == 0 :
    result = result + myArr[idx].upper()
  else:
    result = result + myArr[idx].lower()
  result = result + ' '

result = result.rstrip()    

print(result)
1
Marion 11 ene. 2022 a las 07:39
¡Hey, gracias! funcionó, realmente me ayudó.
 – 
workonprogress
11 ene. 2022 a las 07:44