簡體   English   中英

將變量與Python列表中的所有項目進行比較

[英]Comparing variables to all items in list in Python

我需要為edx Python課程編寫一個函數。 這個想法是找出一系列字符串中字母和單詞的數量,並返回平均字母數,而僅使用for / while循環和條件。 我的代碼幾乎可以執行此操作,但是我不能。 為了我的生命。 弄清楚為什么它不起作用。 現在,我已經對着它猛打了兩天,我知道我很愚蠢而看不見(感到沮喪),這可能是很簡單的事情,但是我不知道那是什么。

如果我正在看第14行,則邏輯很有意義:如果字符串中的i是標點符號( 不是字母),並且前一個字符(在這種情況下為char)不是標點符號(因此是字母),則應為字。 但是它仍然將雙標點符號視為單詞。 但並非所有人

def averageWordLength(myString):
    char = ""
    punctuation = [" ", "!", "?", ".", ","]
    letters = 0
    words = 0
    if not myString == str(myString):
        return "Not a string"
    try:
        for i in myString:
            if i not in punctuation:
                letters += 1
            elif i in punctuation:
                if char not in punctuation:
                    words += 1
                elif char in punctuation:
                    pass
            char = i

        if letters == 0:
            return "No words"
        else:
            average = letters / (words + 1)
            return letters, words + 1, average
    except TypeError:
        return "No words"
print(averageWordLength("Hi"))
print(averageWordLength("Hi, Lucy"))
print(averageWordLength("   What   big spaces  you    have!"))
print(averageWordLength(True))
print(averageWordLength("?!?!?! ... !"))
print(averageWordLength("One space. Two spaces.  Three spaces.   Nine spaces.         "))

所需的輸出:

2, 1, 2.0
6, 2, 3.0
20, 6, 4.0
Not a string
No words
38, 8, 4.75

我在做什么錯呢?!

٩๏̯͡๏۶

最終更正:

for i in myString:
    if i not in punctuation:
        letters += 1
        if char in punctuation:
            words += 1
    char = i
else:
    average = letters / (words + 1)
    return letters, words + 1, average

默認情況下,您要為單詞加1 ...在所有情況下,這都不是有效的: "Hi!" 是一個很好的例子。 這實際上是推遲所有字符串的原因:只要字符串不以單詞結尾,函數就會關閉。

提示 :如果在最后一個單詞后沒有標點符號,則只想添加一個。

當字符串標點符號開頭時,會發生問題:前一個字符仍為""並且不被視為標點字符,因此不存在的單詞被計數。

您可以在符號列表中添加"" ,或執行以下操作:

punctuation = " !?.,"

因為如果c是s的子串,則測試c in s c會返回true,如果c是s的字符,也就是aka。 空字符串包含在每個字符串中。


最后出現第二個問題,如果字符串以單詞結尾 ,則不計算(您的word+1是解決該問題的一種方法),但是如果字符串以標點符號結尾,則計算最后一個單詞。

for循環之后添加此代碼:

if char not in punctuation:
   words += 1

現在無需添加1,只需使用

average = letters / words

由於我假設不允許使用諸如split()之類的內置字符串函數,因此這變得更加困難。

我要解決的方法是:

  1. 將句子分成單詞列表。
  2. 計算每個單詞中的字母。
  3. 取平均字母數。

    def averageWordLength(myString):

     punctuation = [" ", "!", "?", ".", ","] if not isinstance(myString, str): return "Not a string" split_values = [] word = '' for char in myString: if char in punctuation: if word: split_values.append(word) word = '' else: word += char if word: split_values.append(word) letter_count = [] for word in split_values: letter_count.append(len(word)) if len(letter_count): return sum(letter_count)/len(letter_count) else: return "No words." 

暫無
暫無

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

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