簡體   English   中英

python程序中的意外輸出

[英]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所有出現,而不替換Ll

你能做什么? 如您在這些答案中所見,區分大小寫的替換過程有點復雜。 但是在您的情況下,這可能起作用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM