Python:字符串操作函数错误,返回“ None”

时间:2019-12-14 17:24:31

标签: python string function

我目前在Python中遇到字符串处理问题。我正在尝试创建一个函数(称为nameManipulate),在该函数中找到字符串中每个单词的开头,并将其替换为“ n”,以便稍后在程序中使用。 我不知道是否有更快或更有效的方法来做到这一点,但这是我的(从SQL数据库中选择随机歌曲):

import sqlite3, random

db = sqlite3.connect('songsdb')
cursor = db.cursor()

number = str(random.randint(1,50))

cursor.execute('''
SELECT songid,title,artist FROM songs WHERE songid='''+number+'''
''')
all_rows = cursor.fetchall()
for row in all_rows:
    songid = row[0] # Integer
    title = row[1] # String (song name)
    artist = row[2] # String (song artist)
print(songid, title, artist)

def nameManipulate(title):
    new_title = title
    for letter in range(len(title)):
        if title[letter] == " ":
            new_title = title.replace(str(title[letter+1]), "n")
    new_title = new_title.replace(str(title[0]), "n")
    return new_title

displayTitle = str(nameManipulate(title))

print(displayTitle)

结果将按预期打印数据库接收到的全部数据,但是它也应该打印操作过的字符串,而只是打印“无”。

37 Smells Like Teen Spirit Nirvana
None

它应该打印“ nmells nike neen npirit”而不是“ nmells Teen Teen npirit”

任何建议或帮助都将不胜感激,我很想确切地了解出了什么问题以及如何解决。感激!

2 个答案:

答案 0 :(得分:0)

需要编辑功能,需要操纵new_title而不是title。

def nameManipulate(title):
    new_title = title
    for letter in range(len(title)):
        if title[letter] == " ":
            new_title = new_title.replace(str(title[letter+1]), "<letter>")
    new_title = new_title.replace(str(title[0]), "<letter>")
    return new_title

答案 1 :(得分:0)

这是使用正则表达式的完美案例。

如果您对正则表达式一无所知,那么它是掌握工具的绝佳工具。参见the official documentation

以下是一些代码:

import re

names = [
    '37 Smells Like Teen Spirit Nirvana',
    '38 Be My Baby',
]

replaces = [
    re.sub(r' \w', ' n', name) for name in names
]

print replaces
# ['37 nmells nike neen npirit nirvana', '38 ne ny naby']

方法re.sub()接收描述您要查找的正则表达式的字符串(在我们的示例中,字符串' \w'表示空格,后跟任何字符)。然后,我们要求用' n'替换,即,后跟n的空白。然后,我们传递要替换的字符串,它是name列表中的每个names

对于正则表达式,您可以做更多的事情,因此值得一看。