使用递归计算 python 中的大小写字母
count upper and lowercase letters in python using recursion
我需要有关此 python 功能的帮助。
一个递归函数 count_upper_lower() 以非空字符串作为参数,returns 是一个元组,其中包含字符串中大写字母的数量和小写字母的数量(按此顺序) .
例如
print (count_upper_lower(’Town Hall University’))
会return
(3, 15)
这是我目前所拥有的
def count_upper_lower(word):
upper = 0
lower = 0
if word == "":
upper = 0
lower = 0
return upper, lower
elif word[0].isupper():
upper = 1 + count_upper_lower(word[1:])
return upper , lower
elif word[0].islower():
lower = 1 + count_upper_lower(word[1:])
return upper , lower
else:
upper = 0 + count_upper_lower(word[1:])
lower = 0 + count_upper_lower(word[1:])
return upper, lower
我收到以下错误:
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
我会使用循环和 ascii。在 ascii 中 table 65 到 91 是大写,97 到 123 是小写。
def count_upper_lower(word):
upper = 0
lower = 0
for letter in word: #runs through all the letter if empty nothing happens
if 65 <= ord(letter) <= 90:
upper += 1
elif 97 <= ord(letter) <= 122:
lower += 1
return upper,lower
这个也是可以的
def count_upper_lower(word):
upper = 0
lower = 0
for letter in word: #runs through all the letter if empty nothing happens
if letter.isupper():
upper += 1
elif letter.islower():
lower += 1
return upper,lower
在您的 else 块中,您试图将 count_upper_lower() 的返回元组添加到一个数字。
class myCounter():
def __init__(self):
self.lower = 0
self.upper = 0
def count(self, s):
if not s:
return (self.upper, self.lower)
firstCharacter = s[0]
if firstCharacter.islower():
self.lower += 1
elif firstCharacter.isupper():
self.upper += 1
else:
pass #do nothing !
return self.count(s[1:])
c = myCounter()
print(c.count("Town Hall University"))
>>> (3, 15)
使用 tuple
时出现问题,因为它是一个不可变的数据结构。使用 list
代替。
def count_letters(phrase):
if phrase:
letter = phrase[0]
result = count_letters(phrase[1:])
if letter.isupper():
result[0] += 1
elif letter.islower():
result[1] += 1
return result
else:
return [0, 0]
>>> count_letters("LaLaa")
[2, 3]
如果你想用两行代码来完成:
lst = [1 if letter.islower() else 0 for letter in word if letter.islower() or letter.isupper()]
print (lst.count(0),lst.count(1))
如前所述,您正试图将整数添加到元组中,这就是您收到错误消息的原因。请考虑以下示例:
def count_upper_lower(word):
if not word:
return 0, 0
else:
upper, lower = count_upper_lower(word[1:])
if word[0].isupper():
return upper+1, lower
elif word[0].islower():
return upper, lower+1
else:
# make sure that this is what you want
return upper, lower
这里,函数递归调用自身,直到字符串用完。 else case 捕获字符既不是大写字符也不是小写字符(例如数字)的情况,在这种情况下,计数器都不会增加。
我需要有关此 python 功能的帮助。 一个递归函数 count_upper_lower() 以非空字符串作为参数,returns 是一个元组,其中包含字符串中大写字母的数量和小写字母的数量(按此顺序) . 例如
print (count_upper_lower(’Town Hall University’))
会return
(3, 15)
这是我目前所拥有的
def count_upper_lower(word):
upper = 0
lower = 0
if word == "":
upper = 0
lower = 0
return upper, lower
elif word[0].isupper():
upper = 1 + count_upper_lower(word[1:])
return upper , lower
elif word[0].islower():
lower = 1 + count_upper_lower(word[1:])
return upper , lower
else:
upper = 0 + count_upper_lower(word[1:])
lower = 0 + count_upper_lower(word[1:])
return upper, lower
我收到以下错误:
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
我会使用循环和 ascii。在 ascii 中 table 65 到 91 是大写,97 到 123 是小写。
def count_upper_lower(word):
upper = 0
lower = 0
for letter in word: #runs through all the letter if empty nothing happens
if 65 <= ord(letter) <= 90:
upper += 1
elif 97 <= ord(letter) <= 122:
lower += 1
return upper,lower
这个也是可以的
def count_upper_lower(word):
upper = 0
lower = 0
for letter in word: #runs through all the letter if empty nothing happens
if letter.isupper():
upper += 1
elif letter.islower():
lower += 1
return upper,lower
在您的 else 块中,您试图将 count_upper_lower() 的返回元组添加到一个数字。
class myCounter():
def __init__(self):
self.lower = 0
self.upper = 0
def count(self, s):
if not s:
return (self.upper, self.lower)
firstCharacter = s[0]
if firstCharacter.islower():
self.lower += 1
elif firstCharacter.isupper():
self.upper += 1
else:
pass #do nothing !
return self.count(s[1:])
c = myCounter()
print(c.count("Town Hall University"))
>>> (3, 15)
使用 tuple
时出现问题,因为它是一个不可变的数据结构。使用 list
代替。
def count_letters(phrase):
if phrase:
letter = phrase[0]
result = count_letters(phrase[1:])
if letter.isupper():
result[0] += 1
elif letter.islower():
result[1] += 1
return result
else:
return [0, 0]
>>> count_letters("LaLaa")
[2, 3]
如果你想用两行代码来完成:
lst = [1 if letter.islower() else 0 for letter in word if letter.islower() or letter.isupper()]
print (lst.count(0),lst.count(1))
如前所述,您正试图将整数添加到元组中,这就是您收到错误消息的原因。请考虑以下示例:
def count_upper_lower(word):
if not word:
return 0, 0
else:
upper, lower = count_upper_lower(word[1:])
if word[0].isupper():
return upper+1, lower
elif word[0].islower():
return upper, lower+1
else:
# make sure that this is what you want
return upper, lower
这里,函数递归调用自身,直到字符串用完。 else case 捕获字符既不是大写字符也不是小写字符(例如数字)的情况,在这种情况下,计数器都不会增加。