博文

目前显示的是 七月, 2020的博文

拜厄练习曲40, 41

图片
第10周,这礼拜写上半年总结,忙的不亦乐乎。 第一次没按时上传钢琴视频。这礼拜练习了三次,有点糊弄。下礼拜一定好好好练习。

Exercism: Word Count (Python)

统计一句话中单词的数量。可以直接使用collecitons中的Counter。稍微麻烦的是句子需要parse一下。我试着用正规表达式,不过没法全部做到处理全部规则。等通过后看看有没有其他人可以做到。 from collections import Counter import re def count_words(sentence): words = re.findall(r"([\w]+'*[\w]*)+\b", sentence.replace("_", " ").lower()) return dict(Counter(words)) Updated: 19/08/2020 刚看了导师的评论,推荐不用re和dict Counter。直接写parser还有点费劲,要考虑到不同的case。 import re class Counter: def __init__(self): self.__counter = {} def count(self, word): self.__counter.setdefault(word, 0) self.__counter[word] += 1 @property def data(self): return self.__counter def count_words(sentence): #words = sentence.lower().replace(",", " ").replace(".", " ").split(" ") counter = Counter() word = "" start_word = False quote_level = 0 escape = False for c in sentence: if escape: escape = False

Exercism: Twelve Days (Python)

打印一首歌的歌词。主要是分开有规律和需要单独处理的部分,例如 1)开头的一句, 2)中间的句子,和3)最后一句。先单独处理好一遍的歌词,最后在给多变的歌词套个循环。 看了其他人写的,没什么更简便的方法。有一个人用了 num2words,之前不知道这个package。 FIRST_LINE = "On the {} day of Christmas my true love gave to me: " BODY = [ "a Partridge in a Pear Tree", "two Turtle Doves", "three French Hens", "four Calling Birds", "five Gold Rings", "six Geese-a-Laying", "seven Swans-a-Swimming", "eight Maids-a-Milking", "nine Ladies Dancing", "ten Lords-a-Leaping", "eleven Pipers Piping", "twelve Drummers Drumming", ] DAYS = ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"] def recite(start_verse, end_verse): def recite_one(verse):

拜厄练习曲38, 39

图片
第九周,这礼拜练琴加上了节拍器。因为感觉自己对时间把握的不好。不过练习的速度会变慢一些,因为在听节拍器的同时很容易弹错。 上周尝试学习inspector gadget的主题曲,学了一个开头,最后还是放弃了。这应该是个二级的难度,现在的我还没到这个级别。打算选一些女儿平时唱的儿歌来练习。

pygame Alevel 项目

今年每周末都在给一个读A-level计算机的孩子补课。上周他说要开始做设计项目了,想做游戏,不过学校要求只可以用pygame来写。 我之前没用个pygame,打算带着他来做一个横版2D的小游戏。

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,) :"Fine. Be that way!",     (is_shouting, is_qu

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)))

拜厄练习曲35

图片
第七周了。这周练习的最少。到了年中,忙这写总结,周一到周五只练了两次。周末做扫除时又不小心伤到了大拇指,所以这次只弹了35一首曲子。 周六上午和女儿一边收拾屋子,一边听Disney的歌。她让我反复的放Un Loco Poco。我心血来潮,在youtube搜了搜相关的教程,想尝试弹一下,但最后还是放弃了。想了一下,慢慢来,还是专注做好基础练习吧。