我正在从事一项任务,并且陷入了一项特定的任务。我需要编写两个执行相似功能的函数。首先需要纠正句子开头的大写字母,并在完成时计数。我尝试了以下代码:
def fix_capitalization(usrStr):
count = 0
fixStr = usrStr.split('.')
for sentence in fixStr:
if sentence[0].islower():
sentence[0].upper()
count += 1
print('Number of letters capitalized: %d' % count)
print('Edited text: %s' % fixStr)
Bu接收到超出范围的错误。我收到“索引超出范围错误”并且不确定原因。 sentence[0]
不应该简单地引用列表中特定字符串中的第一个字符吗?
我还需要用其他字符替换某些字符,如下所示:
def replace_punctuation(usrStr):
s = list(usrStr)
exclamationCount = 0
semicolonCount = 0
for sentence in s:
for i in sentence:
if i == '!':
sentence[i] = '.'
exclamationCount += 1
if i == ';':
sentence[i] = ','
semicolonCount += 1
newStr = ''.join(s)
print(newStr)
print(semicolonCount)
print(exclamationCount)
但是我正在努力弄清楚一旦找到角色,如何实际进行替换。我在哪里错了?
在此先感谢您的帮助!
答案 0 :(得分:0)
我会在一个字符上使用str.capitalize
而不是str.upper
。它也可以在空字符串上正常工作。另一个主要改进是,在遍历列表时,还使用enumerate
来跟踪索引:
def fix_capitalization(s):
sentences = [sentence.strip() for sentence in s.split('.')]
count = 0
for index, sentence in enumerate(sentences):
capitalized = sentence.capitalize()
if capitalized != sentence:
count += 1
sentences[index] = capitalized
result = '. '.join(sentences)
return result, count
您可以采用类似的方法来替换标点符号:
replacements = {'!': '.', ';': ','}
def replace_punctuation(s):
l = list(s)
counts = dict.fromkeys(replacements, 0)
for index, item in enumerate(l):
if item in replacements:
l[index] = replacements[item]
counts[item] += 1
print("Replacement counts:")
for k, v in counts.items():
print("{} {:>5}".format(k, v))
return ''.join(l)
答案 1 :(得分:0)
有更好的方法来执行这些操作,但是我将尽力更改您的代码,以使您学到一些东西。 第一个功能的问题是,当您拆分句子“ Hello”时。在fixStr列表中将有两个句子,最后一个是一个空字符串;因此,空字符串的第一个索引超出范围。通过执行此操作对其进行修复。
def fix_capitalization(usrStr):
count = 0
fixStr = usrStr.split('.')
for sentence in fixStr:
# changed line
if sentence != "":
sentence[0].upper()
count += 1
print('Number of letters capitalized: %d' % count)
print('Edited text: %s' % fixStr)
在您要编写的第二个片段中,将字符串传递给list()时,您会获得该字符串的字符列表。因此,您需要做的就是遍历列表中的元素并替换它们,然后从列表中获取字符串。
def replace_punctuation(usrStr):
newStr = ""
s = list(usrStr)
exclamationCount = 0
semicolonCount = 0
for c in s:
if c == '!':
c = '.'
exclamationCount += 1
if c == ';':
c = ','
semicolonCount += 1
newStr = newStr + c
print(newStr)
print(semicolonCount)
print(exclamationCount)
希望我能帮上忙!
答案 2 :(得分:0)
Python为此提供了一个不错的内置函数
for str in list:
new_str = str.replace('!', '.').replace(';', ',')
您可以编写一个单行纸以获取新列表
new_list = [str.replace('!', '.').replace(';', ',') for str in list]
您还可以使用split / join方法
new_str = '.'.join(str.split('!'))
new_str = ','.join(str.split(';'))
要计算大写字母,您可以
result = len([cap for cap in str if str(cap).isupper()])
要大写单词,只需使用
str.capitalize()
希望这对您有用