.upper 在 python 中不工作

.upper not working in python

我目前有这个代码

num_lines = int(input())
lines = []
tempy = ''
ctr = 1
abc = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
}
for i in range(0, num_lines):
  tempy = input()
  lines.append([])
  lines[i].append(tempy)


for o in range(0, num_lines):
  for p  in range(0, len(lines[o])):
    for u in range(0, len(lines[o][p])):
      if lines[o][p][u] in abc:
        lines = str(lines)
        if ctr % 2 == 0:
          print(lines[o][p][u])
          lines[o][p][u].upper()
        else:
          print(lines[o][p][u])
          lines[o][p][u].lower()
        ctr += 1

print(lines)

但是 .upper 行似乎没有效果,谁能告诉我为什么?

提前谢谢你,如果已经有答案,请告诉我,我没有标记为重复原因,而是搜索了一个好小时

.upper().lower()函数不修改原来的str。每 the documentation,

对于.upper()

str.upper()

Return a copy of the string with all the cased characters converted to uppercase.

对于.lower()

str.lower()

Return a copy of the string with all the cased characters converted to lowercase.

因此,如果您想要分别显示大写和小写字符,则需要打印 lines[o][p][u].upper()lines[o][p][u].lower() 而不是 lines[o][p][u]。但是,如果我从您的代码示例中正确理解了您的 objective,那么您似乎正试图从字符串输入中交替使用大写和小写字符。你可以使用 list comprehension 和类似下面的东西更容易地做到这一点:

num_lines   = int(input("How many words do you want to enter?: "))
originals   = []
alternating = []

for i in range(num_lines):
        
    line = input("{}. Enter a word: ".format(i + 1))
    originals.append(line)
    alternating.append("".join([x.lower() if j % 2 == 0 else x.upper() for j, x in enumerate(line)]))

print("Originals:\t",   originals)
print("Alternating:\t", alternating)

使用以下示例输出:

How many words do you want to enter?: 3
1. Enter a word: Spam
2. Enter a word: ham
3. Enter a word: EGGS
Originals:       ['Spam', 'ham', 'EGGS']
Alternating:     ['sPaM', 'hAm', 'eGgS']