簡體   English   中英

將列表中的單數單詞轉換為復數

[英]Convert singular words in a list into plurals

我有一個包含幾個單數單詞的列表。

作為練習字符串切片和列表切片的一種方法,我正在嘗試將列表中的單數單詞變成復數 forms。

在嘗試編寫此問題的代碼之前,首先創建如下規則:

A. 如果名詞的結尾是“y”,除“y”外,加“ies”。

B.如果名詞的結尾是“f”或“fe”,除“f”和“fe”外,加“ves”。

C。 如果名詞以“s”、“x”、“z”、“ch”或“sh”結尾,則加“es”。

D.如果名詞以“us”結尾,除“us”外加“i”。

E. 如果以上4種情況都沒有,加“s”。

使用上述規則,我嘗試編寫以下代碼。

word=[** singular word list **]
plural = []
slice = []

for i in range(0, len(word)):
    slice = list(word[i])
    result = ' '
    if slice[len(slice):] == 'y':
        slice.remove('y')
        slice.append('ies')

    elif slice[len(slice)-1:] == 'f':
        slice.remove('f')
        slice.append('ves')

    elif slice[len(slice)-2:] == 'fe':
        slice.remove('fe')
        slice.append('ves')

    elif slice[len(slice)-1:] == 's' or slice[len(slice)-1:] == 'x' or slice[len(slice)-1:] == 'z' or slice[len(slice)-2:] == 'ch' or slice[len(slice)-2:] == 'sh':
        slice.append('es')

    elif slice[len(slice)-2:] == 'us':
        slice.remove('us')
        slice.append('i')

    else:
        slice.append('s')
    
    #result = result.join(slice)
    plural.append(slice)

print(plural)

問題是,我設置的規則不能正常工作。

當我運行這段代碼時,列表中的單詞沒有按照規則集進行轉換,只有else語句中的's'附加到單詞上。 此外,在 output 值的字符之間應用空格。

['a p p l e s', 'a x e s s', 'b o o k s', 'b o x s', 'b u z z s', 'c a t s', 'c a n t u s s', 'c h u r c h s', 'd i s h s', 'k n i f e s', 'l a d y s', 'l e a f s', 'p i t c h s', 's t i m u l u s s', 't a x i s', 'w i s h s', 'w o l f s']

我怎么解決這個問題?

謝謝你。

對列表進行切片會返回一個列表,但您正在與一個字符串進行比較,因此比較總是失敗。

另一個問題是remove()刪除了第一個匹配項,但您想刪除最后的字母。 當您執行slice.remove('y')時,如果單詞中有另一個y ,它將做錯事。 相反,使用切片分配來替換結尾。

索引到列表時,您可以使用負索引從末尾開始計數,因此您不必繼續編寫len(slice)

    if slice[-1:] == ['y']:
        slice[-1:] = ['ies']
    elif slice[-1:] == ['f']:
        slice[-1:] = ['ves']
    elif slice[-2:] == ['f', 'e']:
        slice[-2:] = ['ves']
    elif slice[-1:] == 's' or slice[-1:] == 'x' or slice[-1:] == 'z' or slice[-2:] == ['c', 'h'] or slice[-2:] == ['s', 'h']:
        slice.append('es')
    elif slice[-2:] == ['u', 's']:
        slice[-2:] = ['i']
    else:
        slice.append('s')

這是略有不同的方法。 for 循環從word列表中取出每個單詞,並使用endswith()方法檢查世界的結尾。 如果條件為真,它將獲取原始單詞的一部分,並根據您在問題中陳述的規則將后綴添加到modifiedWord中,然后將其添加到plural列表中。

正如我在評論中提到的,我還從單詞列表中刪除了已經復數的單詞'axes'

這是一個工作代碼:

word = ['apple', 'axe', 'book', 'box', 'buzz', 'cat', 'cantus', 'church', 'dish', 'knife', 'lady', 'leaf',  'pitch', 'stimulus', 'taxi', 'wish', 'wolf']
plural = []

for i in word:
    modifiedWord = ""
    if i.endswith("y"):
        modifiedWord = i[0:len(i) -1] + "ies"
    elif i.endswith("f"):
        modifiedWord = i[0:len(i) -1] + "ves"
    elif i.endswith("f"):
        modifiedWord = i[0:len(i) -2] + "ves"
    elif i.endswith("s") or i.endswith("x") or i.endswith("z") or i.endswith("ch") or i.endswith("sh"):
        modifiedWord = i + "es"
    elif i.endswith("us"):
        modifiedWord = i[0:len(i) -2] + "i"
    else:
        modifiedWord = i + "s"
    plural.append(modifiedWord)

print(plural)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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