博文

Exercism: Isogram (Python)

查看是否有重字符。去除可重字符后,转set来比。第一次做的时候忘记查大小写了😓。 def is_isogram(string):     filter_string = string.replace(" ", "").replace("-", "").lower()     return len(filter_string) == len(set(filter_string))

Exercism: Series (Python)

返回一个序列的连续切片。直接用python的列表切片就可以,唯一要注意的就是使用range是要+1。 def slices(series, length):     if length > len(series) or length <= 0:         raise ValueError("wrong length")     return [series[i:i+length] for i in range(len(series) - length + 1)]

拜厄练习曲36, 37

图片
第八周,两个月了。这周回复正常,练了四次。我发现每周一好像都不想练,跳过去了。 这周练习36-37,挺好听的两首曲子。虽然之前练习的很熟,可是到了周日录音时,不知怎么,总是出错。弹了很久也没有弹出一次特别满意的版本。 上周刚放弃了学习Un Loco Poco的想法, 这周又想了学inspector gadget的主题曲。思想斗争了半天,最后还是没忍住,打算开练。不过还是要慢慢来,把练习分开,一周只练一两个小节就好。

Exercism: Difference Of Squares (Python)

求平方和和平方的和的差(很绕口)。很简单使用列表解析就可以。扫了一眼其他人的答案,有直接用公式的人。平方和我到是知道,不过平方的和我还真没记过。 平方和  ( n(n-1)/2 )** 2 平方的和  (n * (n + 1) * (2n + 1) / 6 def square_of_sum(number):     return sum(i for i in range(1,number+1)) ** 2 def sum_of_squares(number):     return sum(i ** 2 for i in range(1, number+1)) def difference_of_squares(number):     return square_of_sum(number) - sum_of_squares(number) 

Exercism: Bob (Python)

一道简单字符串匹配的题,不过这是我最近花时间最多的一道题了。原因是之前看了一下python的正则表达式,想说只用正则表达式来做。但是废了半天劲也没写出很满意的答案。 看了看其他人的答案,感觉1)还是直接使用isupper()比较简单, 2)把单个匹配条件拆分出来再来做组合。 原版: import re RESPONSES = {     "^[\s]*$":"Fine. Be that way!",     "^[A-Z]+\?$": "Calm down, I know what I'm doing!",     "^[A-Z]+$": "Whoa, chill out!",     "^.*\?$": "Sure.",     ".*": "Whatever." } def response(hey_bob):     msg = "".join([c for c in hey_bob if c.isalpha() or c =='?'])     if not msg and hey_bob.strip():         return "Whatever."      for pattern in RESPONSES:         if re.search(pattern, msg.strip()):             return RESPONSES[pattern] 改进版 import re def is_question(msg):     return msg.strip()[-1] == '?' def is_empty(msg):     return len(msg.strip()) == 0 def is_shouting(msg):     return msg.isupper() RESPONSES = {     (is_empty,) :"...

Exercism: Armstrong Numbers (Python)

求阿如姆斯特朗数。本身想使用一个functools.reduce来做,后来发现不用,直接用列表解析来做。看了其他人做法,大同小异。 def is_armstrong_number(number):     number_str = str(number)     powers = [int(n)**len(number_str) for n in number_str]     return number == sum(powers)

Exercism: Hamming (Python)

简单版的汉明距离计算。开始写了一个循环单个比,mentor回复说用 列表解析 比较简单。 原版 def distance(strand_a, strand_b):     if len(strand_a) != len(strand_b):         raise ValueError("The length of string a and b are not same")     distance = 0     for i in range(len(strand_a)):         if strand_a[i] != strand_b[i]:             distance += 1     return distance 改进版 def distance(strand_a, strand_b): if len(strand_a) != len(strand_b): raise ValueError("The length of string a and b are not same") return sum(1 if strand_a[i] != strand_b[i] else 0 for i in range(len(strand_a)))