我想知道我哪里出错了。目的是用X替换用户输入中的字母e,用*替换空格。这都是在python中完成的,结果应该是hxllo * world
i=0
str=input('please enter a phrase ')
numberOfChar=len(str)
copy=''
while i < numberOfChar:
if str[i] == 'e':
copy=str.replace('e','x')
elif str[i] == ' ':
copy=str.replace(' ', '*')
i = i+1
print(copy)
谢谢
更多信息:
它适合大学,不得不使用while循环和if函数。当我意识到street.replace引用了变量名而不是错误地将我的功能名称变得清晰。谢谢大家
答案 0 :(得分:5)
如果我正确理解您的项目要求,您可能希望完全避免使用str.replace()
并使用类似的内容,这只是@ Ajax1234答案的一个更明确的变体:< / p>
string = input('Enter a string: ')
collector = []
for char in string:
if char == 'e':
char = 'x'
elif char == ' ':
char = '*'
collector.append(char)
new_string = ''.join(collector)
旁注:您不需要循环变量i
来迭代字符串。您可以直接迭代字符串中的字符,如上所示。
标准库选项是使用str.translate()
:
>>> table = str.maketrans(' e', '*x')
>>> 'hello world'.translate(table)
'hxllo*world'
答案 1 :(得分:1)
您可以使用字典和get
方法:
convert = {"e":"x", ' ':"*"}
s = "hello world"
final_s = ''.join(convert.get(i, i) for i in s)
输出:
'hxllo*world'
答案 2 :(得分:1)
您不需要循环或if语句,因为.replace()
适用于整个字符串...
mystring = input('please enter a phrase ')
copy = mystring.replace("e","x").replace(" ","*")
答案 3 :(得分:1)
some_string.replace(x,y)
会返回some_string
的副本,其中x替换为y。你的程序正确地替换了值,但是在第二步中(以先到者为准,o到x或空格为*) - 它仍然在未更改的原始字符串上执行。这是一个更紧凑的解决方案 - 没有必要为每个字母执行此操作:
string=raw_input('Enter text ')
copy = (string.replace('e','x')).replace(' ', '*')
print copy
为了证明这一点,这是你实际按预期工作的循环:
copy = string
while i < numberOfChar:
if string[i] == 'e':
copy = copy.replace('e','x')
elif string[i] == ' ':
copy = copy.replace(' ', '*')
i = i+1
程序从输入中复制string
,然后对其进行操作,同时每次都覆盖它。但这不是必需的,因为replace
在第一次调用中查找/替换整个字符串。
此外,正如评论中所述,您不应使用str
作为变量名称。
答案 4 :(得分:0)
使用replace方法比尝试使用它的方式简单得多。
phrase=input('please enter a phrase ')
copy = phrase.replace('e', 'x')
copy = copy.replace(' ', '*')
print(copy)