在python

时间:2017-10-20 00:29:04

标签: python python-3.x

我想知道我哪里出错了。目的是用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引用了变量名而不是错误地将我的功能名称变得清晰。谢谢大家

5 个答案:

答案 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)