比较两个字符串,忽略大小写,比如字符串"abc"和字符串"ABC",在忽略大小写的情况下是相等的,实现函数
def is_same_ignore_case(str1, str2):
"""
忽略大小写比较两个字符串是否相等
:param str1:
:param str2:
:return:
"""
pass
要求,不能使用字符串的lower方法和upper方法
题目要求不能使用字符串的lower方法和upper方法,之所以这样要求,是希望你能从更基础的编程做起,培养更深入的思考。
要解这个练习题,你需要对ASCII码表有一定的了解,在ASCII码表中,大小写字母的十进制编码相差32。
通过for循环,遍历str1,同时获取与之相对应索引上的字母,因为要忽略大小写,因此,将他们都转换成ASCII码表里的十进制数值,并且统一转成小写字母的十进制数值。
在进行正式比较前,严谨的判断逻辑应该是先判断传入的参数str1和str2是否有效,然后判断这两个字符串的长度是否相等,这些都是从程序的健壮性和效率上考虑的。
enumerate函数是一个非常方便且有用的函数,在for循环中,既能获得遍历的元素,又能获得该元素的索引。
def get_ord_value(string):
value = ord(string)
if 65 <= value <= 90:
value += 32
return value
def is_same_ignore_case(str1, str2):
"""
忽略大小写比较两个字符串是否相等
:param str1:
:param str2:
:return:
"""
if not isinstance(str1, str) or not isinstance(str2, str):
return False
if len(str1) != len(str2):
return False
# 统一转成小写
for index, item in enumerate(str1):
value1 = get_ord_value(item)
value2 = get_ord_value(str2[index])
if value1 != value2:
return False
return True
if __name__ == '__main__':
print(is_same_ignore_case('ABC', 'abc'))
print(is_same_ignore_case('ABC', 'abd'))
QQ交流群: 211426309