[英]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()之類的內置字符串函數,因此這變得更加困難。
我要解決的方法是:
取平均字母數。
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.