将大写固定为字符串,然后将其与原始字符串进行比较

时间:2018-12-13 14:13:51

标签: python python-3.x

我正在尝试编写一个函数来修复句子的大写字母,然后计算出修复了多少个单词。我正在尝试通过将原始字符串复制到新字符串中,分割该字符串,将其全部变为小写,然后在其上使用“ .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清楚地分成了一个列表。

有什么想法吗?谢谢!

3 个答案:

答案 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