编写一个接受字符串和字符作为输入的函数 返回以字符串开头的所有单词的计数 给定的性格。假设资本化在这里无关紧要。您 可以假设输入字符串是一个句子,即单词 由空格分隔,由字母字符组成。
这是我的代码:
def count_input_character (input_str, character):
input_str = input_str.lower()
character = character.lower()
count = 0
for i in range (0, len(input_str)):
if (input_str[i] == character and input_str[i - 1] == " "):
count += 1
return (count)
#Main Program
input_str = input("Enter a string: ")
character = input("Enter character whose occurances are to be found in the given input string: ")
result = count_input_character(input_str, character)
#print(result)
这里缺少的唯一部分是如何检查句子的第一个单词是否用用户给定的字符说明。考虑这个输出:
您的答案不正确您的代码已使用不同的输入进行测试。 >例如,当您的函数被调用时,如下所示:
count_input_character('婆罗门是宇宙大师',' t')
#######你的函数返回############# 2返回的变量类型是:type' int' ###正确的返回值应该是######## 3返回的变量类型是:type' int'
答案 0 :(得分:3)
你的功能错过了第一个t
,因为在这一行中
if (input_str[i] == character and input_str[i - 1] == " "):
当i
为0
时,input_str[i - 1]
为input_str[-1]
,Python将将其解析为字符串的 last 字符!
要解决此问题,您可以将条件更改为
if input_str[i] == character and (i == 0 or input_str[i - 1] == " "):
或者使用str.split
列表理解。或者是regular expression,例如r'(?i)\b%s'
,(?i)
含义"忽略大小写",\b
是字边界,%s
是角色的占位符..
答案 1 :(得分:2)
您可以在空格上拆分input_str
,而不是查找空格,这会生成一个单词列表,然后您可以针对character
进行测试。 (下面的伪代码)
function F sentence, character {
l = <sentence split by whitespace>
count = 0
for word in l {
if firstchar(word) == character {
count = count + 1
}
}
return count
}
答案 2 :(得分:1)
虽然它没有修复您的特定错误,但出于教育目的,请注意您可以使用列表解析重写您的函数:
def count_input_character (input_str, character):
return len([x for x in input_str.lower().split() if x.startswith(character.lower())])
甚至更有效率(感谢tobias_k)
def count_input_character (input_str, character):
sum(w.startswith(character.lower()) for w in input_str.lower().split())
答案 3 :(得分:0)
def c_upper(text, char):
text = text.title() #set leading char of words to uppercase
char = char.upper() #set given char to uppercase
k = 0 #counter
for i in text:
if i.istitle() and i == char: #checking conditions for problem, where i is a char in a given string
k = k + 1
return k