【问题标题】:.upper not working in python.upper 在 python 中不起作用
【发布时间】:2017-10-31 01:23:55
【问题描述】:

我目前有这个代码

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 行似乎没有效果,谁能告诉我为什么?

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

【问题讨论】:

  • 我不知道你想用你的索引做什么......你说的lines[o][p][u]是什么意思?没有三个嵌套列表?
  • 你实际上想用这段代码完成什么?
  • 请将您的程序缩减为仍能显示错误的最短程序。如果您的问题是关于.upper(),那么该演示程序应该是大约三行。请参阅minimal reproducible example 了解更多信息。
  • 我怀疑你的问题可以这样证明:s = 'abcdef'/s.upper()/print(s),预期输出ABCDEF,实际输出abcdef。是这样吗?
  • 字符串是不可变的。您必须将返回的值从upper() 分配给一个变量,它不会被原地更改。所以不是lines[o][p][u].upper() 而是lines[o][p][u] = lines[o][p][u].upper()。您的示例代码对于您要显示的问题来说太复杂了。你可以做一个比这更简单的例子。

标签: python uppercase


【解决方案1】:

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

对于.upper()

str.upper()

返回字符串的副本,其中所有大小写字符都转换为大写。

对于.lower()

str.lower()

返回字符串的副本,其中所有大小写字符都转换为小写。

因此,如果您分别需要大写和小写字符,则需要打印lines[o][p][u].upper()lines[o][p][u].lower(),而不是lines[o][p][u]。但是,如果我从您的代码示例中正确理解了您的目标,那么您似乎正在尝试从字符串输入中替换大写和小写字符。您可以使用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']

【讨论】:

  • 感谢您的帮助!不知道它会自动保存!
猜你喜欢
  • 2012-04-15
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2016-11-05
  • 2016-05-22
  • 2012-06-07
  • 1970-01-01
  • 2017-09-08
相关资源
最近更新 更多