我目前正在为我的Python课程做一个程序。描述如下:
编写一个简短的python程序,YI_swapOandE.py用'e'替换'o'。如果用户包含o,则提示用户输入单词并显示其交换版本。否则,程序将只显示原始单词。该程序必须使用您在Hangman程序中学习的切片技术。 例: 输入一个单词,我将替换任何' o'和扫帚一起扫帚 交换的单词是:breem
到目前为止,在她告诉我们重新使用一些代码之后,我做到了这一点:
def splicing():
word = input("Please input a word")
for i in range(len(word)):
letter = word[i]
if letter == 'o':
word = letter[:i] + word[i] + letter[i+1:]
print(word)
def main():
splicing()
main()
是的,我知道有些不完美但我只需要一点帮助。
目前,我收到错误:字符串索引超出范围
我该如何解决这个问题?
答案 0 :(得分:3)
问题在于letter = word[i]
。我觉得你很困惑。
你会继续把它视为一个包含多个字符的字符串。
def splicing():
word = input("Please input a word")
for i in range(len(word)):
letter = word[i]
if letter == 'o':
word = word[:i] + 'e' + word[i+1:]
print(word)
def main():
splicing()
main()
答案 1 :(得分:1)
您的代码
def splicing():
word = input("Please input a word")
for i in range(len(word)):
letter = word[i]
if letter == 'o':
word = letter[:i] + word[i] + letter[i+1:]
print(word)
让我们看看
letter = word[i]
if letter == 'o':
可以简化为
if word[i] == 'o':
现在,让我们来看看当你找到'o'
时你会做什么 word = letter[:i] + word[i] + letter[i+1:]
使用您之前使用的letter
word = word[i] + word[i] + word[i]
这不是你想要的,首先是因为你没有在你的词中加上'e'......
word = word[:i]+'e'+word[1+1:]
总结
def splicing():
word = input("Please input a word")
for i in range(len(word)):
if word[i] == 'o':
word = word[:i]+'e'+word[i+1:]
print(word)
上述过程适用于您当前的级别,但它效率不高,因为您一次又一次地构建了一个名为word
的字符串......将字符串转换为数据的效率要高得多可以就地改变的结构,操作替换并转换回字符串
>>> word = 'Popeye & Olive'
>>> l = [c for c in word]
>>> print(l)
['P', 'o', 'p', 'e', 'y', 'e', ' ', '&', ' ', 'O', 'l', 'i', 'v', 'e']
现在,您可以在构建新数据结构时应用修改:
>>> l = ['e' if c == 'o' else c for c in word]
>>> print(l)
['P', 'e', 'p', 'e', 'y', 'e', ' ', '&', ' ', 'O', 'l', 'i', 'v', 'e']
它非常易读,不是吗?
现在让我们更进一步,改变首都'O'
>>> l = ['e' if c == 'o' else 'E' if c == 'O' else c for c in word]
它有点复杂但仍然可读......
>>> print(l)
['P', 'e', 'p', 'e', 'y', 'e', ' ', '&', ' ', 'E', 'l', 'i', 'v', 'e']
但这不是我们想要的,我们想要一个字符串!
为此目的,python提供了str.join()
方法---这里我们要使用空字符串l
加入""
的元素
>>> print("".join(l))
Pepeye & Elive
>>>
如果我们想把它们放在一起
>>> word = "".join(['e' if c=='o' else 'E' if c=='O' else c for c in word])
>>> print(word)
Pepeye & Elive
>>>
答案 2 :(得分:0)
replace
可以做你想要达到的目标:
>>> "hello how are you".replace('o','e')
'helle hew are yeu'
>>> "broom".replace('o','e')
'breem'
对您的代码进行一些修改:
def splicing():
word = input("Please input a word")
modify = ''
for i in range(len(word)):
if word[i] == 'o':
modify += 'e'
else: modify += word[i]
print(modify)
def main():
splicing()
main()
答案 3 :(得分:0)
您将letter
定义为单个字符:
letter = word[i]
然后在这一行:
word = letter[:i] + word[i] + letter[i+1:]
......你正在切片。这就是错误的原因。使用letter
更改该行中word
的两个引用可能就是您要尝试的内容,但您还需要将一个引用更改为word
在那里。 (提示:因为当你看到'o'时你只是碰到了这个区域的内部,你确切地知道你想要去那里。不需要变量。)