Codewars笔记
说明:以下内容均来自codewars网站,列举的试题我都做过且通过,并以此记录来学习python。
1,需求:将大小写互相转换,非字母的字符保留
我的代码:
1 def to_alternating_case(string): 2 #your code here 3 result = '' 4 for i in range(len(string)): 5 if string[i].isupper(): 6 result += string[i].lower() 7 elif string[i].islower(): 8 result += string[i].upper() 9 else: 10 result += string[i] 11 return result
示例代码1:
1 def to_alternating_case(string): 2 return ''.join([c.upper() if c.islower() else c.lower() for c in string])
示例代码2:
1 def to_alternating_case(string): 2 return string.swapcase()
测试代码:
1 Test.assert_equals(to_alternating_case("hello world"), "HELLO WORLD") 2 Test.assert_equals(to_alternating_case("HeLLo WoRLD1234"), "hEllO wOrld1234") 3 Test.assert_equals(to_alternating_case("String.prototype.toAlternatingCase"), "sTRING.PROTOTYPE.TOaLTERNATINGcASE") 4 Test.assert_equals(to_alternating_case(to_alternating_case("Hello World")), "Hello World") 5 Test.it("should work for the title of this Kata") 6 title = "altERnaTIng cAsE" 7 title = to_alternating_case(title) 8 Test.assert_equals(title, "ALTerNAtiNG CaSe") 9 title = "altERnaTIng cAsE <=> ALTerNAtiNG CaSe"
总结:对基础仍不熟练,缺少主动性练习
2、需求:识别字符串中数字化的字符,并将其改正。
例如,处理一下错误
- S is misinterpreted as 5
- O is misinterpreted as 0
- I is misinterpreted as 1
测试方法:
Test.assert_equals(correct("L0ND0N"),"LONDON");
Test.assert_equals(correct("DUBL1N"),"DUBLIN");
Test.assert_equals(correct("51NGAP0RE"),"SINGAPORE");
Test.assert_equals(correct("BUDAPE5T"),"BUDAPEST");
Test.assert_equals(correct("PAR15"),"PARIS");
我的代码:
1 def correct(string): 2 for i in range(len(string)): 3 if "5" in string: 4 string = string.replace('5','S') 5 elif "0" in string: 6 string = string.replace('0','O') 7 elif "1" in string: 8 string = string.replace('1','I') 9 return string
示例代码1:
def correct(string): return string.translate(str.maketrans("501", "SOI"))
解析:
maketrans 和 translate 函数是进行字符串字符编码的常用方法
maketrans用法
string.maketrans(from, to) #制作翻译表
translate 用法
string.translate(s, table[, deletechars]) str.translate(table[, deletechars]) unicode.translate(table)
参数
- table -- 翻译表,翻译表是通过 maketrans() 方法转换而来。
- deletechars -- 字符串中要过滤的字符列表。
返回值
返回翻译后的字符串,若给出了 delete 参数,则将原来的bytes中的属于delete的字符删除,剩下的字符要按照table中给出的映射来进行映射
实例:
1 import string 2 map = string.maketrans('123', 'abc') 3 s = "123345" 4 string.translate(s,map) #'abcc45' 5 s.translate(string.maketrans('123', 'aaa'), '5') #'aaaa4' 6 s.translate(map) #'abcc45' 7 s.translate(string.maketrans('123', 'aaa')) #'aaaa45'
示例代码2:
1 def correct(string): 2 return string.replace('1','I').replace('0','O').replace('5','S')
3、需求:得到一组数字,返回所有正数的总和。
Example [1,-4,7,12] => 1 + 7 + 12 = 20
提示:如果数组为空,和默认为0
我的代码;
1 def positive_sum(arr): 2 # Your code here 3 sum = 0 4 if arr == []: 5 return 0 6 else: 7 for i in arr: 8 if i >0: 9 sum = sum + i 10 return sum
1 #示例代码1: 2 def positive_sum(arr): 3 return sum(x for x in arr if x > 0) 4 5 #示例代码2: 6 def positive_sum(arr): 7 return sum(filter(lambda x: x > 0,arr)) 8 9 #示例代码3: 10 def positive_sum(arr): 11 return sum(map(lambda x: x if x > 0 else 0, arr))
总结:因没仔细看需求,瞄了一眼就以为是把列表中的每个数求和,导致因为存在负数使得求和结果和测试的期望值不同,为了解决这个不必要的问题浪费了许多时间。
您对以上内容有何建议或意见,请写下来告诉我,谢谢!!!