所以当我遇到奇数指数中的字符大写时,我正在做练习。我试过这个:
for i in word:
if i % 2 != 0:
word[i] = word[i].capitalize()
else:
word[i] = word[i]
然而,它最终显示错误,表示并非所有字符串都可以转换。你能帮我调试一下这段代码吗?
答案 0 :(得分:5)
问题是python中的字符串是不可变的,你不能改变单个字符。除此之外,当您遍历字符串时,您将迭代字符而不是索引。所以你需要使用不同的方法
解决方法是
(使用enumerate
)
for i,v in enumerate(word):
if i % 2 != 0:
word2+= v.upper()
# Can be word2+=v.capitalize() in your case
# only as your text is only one character long.
else:
word2+= v
使用列表
wordlist = list(word)
for i,v in enumerate(wordlist):
if i % 2 != 0:
wordlist[i]= v.upper()
# Can be wordlist[i]=v.capitalize() in your case
# only as your text is only one character long.
word2 = "".join(wordlist)
关于capitalize
和upper
的简短说明。
来自文档capitalize
返回字符串的副本,其 第一个字符大写 ,其余字样小写。
所以你需要使用upper
。
返回字符串的副本, 所有套接字符 转换为大写。
但在你的情况下,两者都准确无误。或者正如Padraic所说的across "这个示例效率或输出明显没有区别"
答案 1 :(得分:3)
你需要枚举和大写任何奇数i
的任何字符,其中i
是单词中每个字符的索引:
word = "foobar"
print("".join( ch.upper() if i % 2 else ch for i, ch in enumerate(word)))
fOoBaR
ch.upper() if i % 2 else ch
是conditional expression,如果条件为True,我们会更改char,否则保持原样。
当i % 2
是字符串中的实际字符时,您不能i
,您需要在代码中使用范围或使用枚举并将更改的字符连接到输出字符串或将单词作为列表
使用列表可以使用赋值:
word = "foobar"
word = list(word)
for i, ele in enumerate(word):
if i % 2:
word[i] = ele.upper()
print("".join(word))
使用输出字符串:
word = "foobar"
out = ""
for i, ele in enumerate(word):
if i % 2:
out += ele.upper()
else:
out += ele
if i % 2:
与撰写if i % 2 != 0
相同。
答案 2 :(得分:0)
这就是我如何将单词或句子中的单词字母更改为大写
word = "tester"
letter_count = 1
new_word = []
for ch in word:
if not letter_count % 2 == 0:
new_word.append(ch.upper())
else:
new_word.append(ch)
letter_count += 1
print "".join(new_word)
如果我想将句子中的奇数单词改为大写,我会这样做
sentence = "this is a how we change odd words to uppercase"
sentence_count = 1
new_sentence = []
for word in sentence.split():
if not sentence_count % 2 == 0:
new_sentence.append(word.title() + " ")
else:
new_sentence.append(word + " ")
sentence_count += 1
print "".join(new_sentence)
答案 3 :(得分:0)
我认为这会有所帮助...
s = input("enter a string : ")
for i in range(0,len(s)):
if(i%2!=0):
s = s.replace(s[i],s[i].upper())
print(s)