我复制了下面的代码并对命名进行了一些修改以解决问题,如上所述:给定一个字符串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'))
答案 0 :(得分:1)
Python会区分大小写。换句话说:
'L' != 'l'
所以,当你这样做时
rest_letters = rest_letters.replace(start_letter,'*')
它将替换仅L
的所有出现,而不是L
和l
。
你能做什么?不区分大小写的替换过程有点复杂,你可以在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