我正在尝试编写一个函数来修复句子的大写字母,然后计算出修复了多少个单词。我正在尝试通过将原始字符串复制到新字符串中,分割该字符串,将其全部变为小写,然后在其上使用“ .capitalize()”函数,然后在新字符串和原始字符串之间循环以及比较它们以计算变化。
这是我的代码:
pd.DataFrame([["John","guitar","dancing"],["Michael","Football",None],["Andrew","running","cars"]])
我一次又一次地遇到错误,并且已经达到了我的机智。这是我最新的错误:
def fix_capitalization(usrStr):
count = 0
newStr = usrStr.split('.')
for i in newStr:
newStr.append(i.lower())
newStr.append(i.capitalize())
newStr = ''.join(newStr)
for new, usr in zip(newStr, usrStr):
if new != usr:
count += 1
我在这里做错了什么?似乎我所有的错误都是类型错误,我很困惑,因为我在追加之前将newStr清楚地分成了一个列表。
有什么想法吗?谢谢!
答案 0 :(得分:0)
串联通过'+'或join函数发生,而不是为字符串追加。您可以通过以下方式尝试:
SELECT
order_date,
p_category,
issue_group,
srt_level,
order_count,
CASE
WHEN srt_level = '80' THEN order_count
WHEN srt_level = '100' THEN
SUM(CASE WHEN srt_level != 'Late' THEN order_count END) OVER(
PARTITION BY order_date, issue_group, p_category
)
END AS filled_orders,
total_orders
FROM ....
要么
newStr+=i.lower()
或newStr = newStr + i.lower()
答案 1 :(得分:0)
出现错误是因为您正在循环中将列表转换为字符串。下面的代码应该可以解决您的错误。
def fix_capitalization(usrStr):
count = 0
newStr = []
newSentance = []
for i in usrStr.split('.'):
newStr.append(i.capitalize())
newSentance = '.'.join(newStr)
for new, usr in zip(newSentance, usrStr):
if new != usr:
count += 1
return count
答案 2 :(得分:0)
您正试图append
到不可变的字符串对象,说对不可变对象的任何更改都将创建一个新对象。您可以使用+
运算符来连接字符串。我相信您可以将其转换为两个列表,然后进行比较
def fix_capitalization(usrStr):
count = 0
usrStr = usrStr.split('.') #create a list
newlist=[]
for i in usrStr:
newlist.append(i.lower().capitalize())
newStr1 = '.'.join(newlist) # convert list to string again
for new, usr in zip(usrStr, newlist):
if new != usr:
count += 1
return count
测试
fix_capitalization('Test string.mY another String.Correct string')
输出
1