[英]Unexpected output in python program
我復制了以下代碼,並做了一些改動,以解決上述問題:給定字符串s,返回一個字符串,其中所有出現的第一個字符都已更改為'*',但不更改第一個字符本身。 例如,“ ba”會產生“ 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'))
發生的事情是Python 區分大小寫 。 換一種說法:
'L' != 'l'
所以,當你這樣做
rest_letters = rest_letters.replace(start_letter,'*')
它將僅替換L
所有出現,而不替換L
和l
。
你能做什么? 如您在這些答案中所見,區分大小寫的替換過程有點復雜。 但是在您的情況下,這可能起作用:
rest_letters = rest_letters.replace(start_letter,'*').replace(start_letter.lower(), '*')
在您的代碼中,您要替換字符串其余部分中第一個字母“ 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
實際上,您嘗試替換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'))
非常簡單,僅需要使用lower()
或upper()
來更改字符串的大小寫:
start_letter = s[0].lower()
rest_letters = s[1:].lower()
輸入: LulLa
輸出: lu ** a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.