python程序中的意外输出

2024-04-23 19:11:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我复制了下面的代码,对命名做了一些修改,以解决上述问题:给定一个字符串s,返回一个字符串,其中第一个字符的所有出现处都已更改为“*”,但不更改第一个字符本身。e、 g.“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'))

Tags: 字符串代码lerest字符fix解释器start
3条回答

结果是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(), '*')

只需使用lower()upper()更改字符串大小写即可:

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

Input: LulLa
Output: lu**a

在代码中,您将替换字符串其余部分中第一个字母“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

相关问题 更多 >