Я новичок в программировании на Python. Я пытаюсь узнать о списках.

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

Я застрял здесь:

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))

С помощью этого кода я могу получить, например:

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

Но то, что я пытаюсь получить, это:

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

Я хочу добавить пробел к каждому слову в предложении.

2
workonprogress 11 Янв 2022 в 07:33

6 ответов

Лучший ответ

Вы вроде поняли - лучший способ сделать это - добавить слова с заглавными/строчными буквами в список, а затем использовать .join(), чтобы превратить список слов в строку, где каждое слово отделено пробелом:

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))

Вопреки тому, что предлагали другие ответчики, использование повторной конкатенации - это плохо идея из соображений эффективности.

4
BrokenBenchmark 11 Янв 2022 в 07:38
1
Эй, спасибо! это сработало, это действительно помогло мне.
 – 
workonprogress
11 Янв 2022 в 07:44

Используя понимание списка, мы можем попробовать:

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 Янв 2022 в 07:41

Вы можете добавить все значения в список и, наконец, соединить их с помощью str.join.

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))

Выход:

HELLO my NAME is RAHUL and I'M from INDIA
2
pppig 11 Янв 2022 в 07:37
1
Эй, спасибо! это сработало, это действительно помогло мне.
 – 
workonprogress
11 Янв 2022 в 07:44

В дополнение к другим ответам я предоставил здесь еще один тип ответов, используя enumerate (см. https://www.geeksforgeeks.org/enumerate-in-python/), которые зацикливают список (или кортеж) с его индексом:

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))

Ответ также может быть короче, как это, используя понимание списка (см. )

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))

Было бы полезно знать для вашей жизни Python :)

2
Sangkeun Park 11 Янв 2022 в 07:48

Я добавил место, где вы добавляете к списку:

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))

Это дает:

HELLO my NAME is RAHUL and I'M from INDIA 
1
Sibtain Reza 11 Янв 2022 в 07:36
1
Эй, спасибо! это сработало, это действительно помогло мне.
 – 
workonprogress
11 Янв 2022 в 07:44

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

result = result + ' '

Это также добавит пробел в конце строки, что может быть нежелательно. Вы можете удалить его с помощью функции rstrip():

result = result.rstrip()

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

Итак, собираем все вместе:

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 Янв 2022 в 07:39
Эй, спасибо! это сработало, это действительно помогло мне.
 – 
workonprogress
11 Янв 2022 в 07:44