python程序中的意外输出

时间:2014-07-07 04:47:15

标签: python

我复制了下面的代码并对命名进行了一些修改以解决问题,如上所述:给定一个字符串s,返回一个字符串,其中第一个字符的所有出现都已更改为'*',但不要更改第一个字符串char本身。例如'babble'收益'ba ** le'。假设字符串的长度为1或更长。这是代码:我的问题是,当我通过“Lulla”时,为什么我不能在解释器中看到“Lu ** a”,因为我认为代码应该这样做。

def fix_start(s):
    start_letter = s[0]
    rest_letters = s[1:]
    rest_letters = rest_letters.replace(start_letter,'*')  
    return start_letter + rest_letters

print (fix_start ('Lulla'))

4 个答案:

答案 0 :(得分:1)

Python会区分大小写。换句话说:

'L' != 'l'

所以,当你这样做时

rest_letters = rest_letters.replace(start_letter,'*')

它将替换仅L的所有出现,而不是Ll

你能做什么?不区分大小写的替换过程有点复杂,你可以在these answers中看到。但在你的情况下,这可能有用:

rest_letters = rest_letters.replace(start_letter,'*').replace(start_letter.lower(), '*')

答案 1 :(得分:0)

在您的代码中,您将替换字符串其余部分中第一个字母“L”的任何实例。在示例的情况下,“Lulla”,第一个字母是大写“L”,并且不等于“l”。因此,我会尝试以下方法:

def fix_start(s):
    start_letter = s[0]
    rest_letters = s[1:]
    rest_letters = rest_letters.replace(start_letter.lower(),'*')
    return start_letter + rest_letters

如果您的字符串保证在语法上正确(如在单词中间没有大写字母),则上述解决方案将起作用。

如果无法保证,请继续尝试:

def fix_start(s):
    start_letter = s[0]
    rest_letters = s[1:]
    rest_letters = rest_letters.replace(start_letter.lower(),'*')
    rest_letters = rest_letters.replace(start_letter, '*')
    return start_letter + rest_letters

答案 2 :(得分:0)

实际上,您尝试替换L但其余字符很小l。请尝试使用正则表达式,以简化此任务。

import re
def fix_start(s):
    start_letter = s[0]
    regex = s[0].lower()+"|"+s[0].upper()
    rest_letters = s[1:]
    rest_letters = re.sub(regex, "*", rest_letters) 
    return start_letter + rest_letters

print (fix_start ('Lulla'))

答案 3 :(得分:0)

非常简单,只需使用lower()upper()来更改字符串大小写:

start_letter = s[0].lower()
rest_letters = s[1:].lower()
  

输入: LulLa
  输出: lu ** a