前面在medium写了几天,发现没有人回应,好无聊
后来在查资料的时候发现这里也可以发文,就来发发看,有人回再把前面po一po
===
因为觉得爬虫的书真的太难懂了,而且上面的範例又跑不出来
于是这几天又跑回去读100天python
目前读到第7天的[字符串和常用数据结构]
第一个练习他说要我做出一个跑马灯,没了
于是我写了一只拉长狗
原本想要做类似逐格动画的效果,但知识不足,不知道印出来的要怎么消掉,先记录起来看二刷的时候能不能挑战写个会动的狗勾~
=
结果参考答案里面就有方法了,而且他的code更加简洁...每次绞尽脑汁写的都以为自己是最简洁了,结果都被降纬打击...很好奇他到底怎么做到的呢
不过执行这段code的时候会出现
sh: cls: command not found
餵狗之后发现只要把cls改成clear就可以了
然后这段code的作用是把command里的指令都擦乾净,刚好符合我的需求
原本写的
import timedog=' ૮ ・ﻌ・ა \n(´_ゝ`)ノ ノ\n | |\n ˇ ˇ'time.sleep(5)print(dog)for i in range(10): time.sleep(0.6) print(' | |')print(' ˇ ˇ')
参考答案
import osimport timedef main(): content = '北京欢迎你为你开天辟地…………' while True: # 清理屏幕上的输出 os.system('clear') print(content) # 休眠200毫秒 time.sleep(1) content = content[1:] + content[0]if __name__ == '__main__': main()
可以改进的地方:
一开始有想到要用while但有点怕跑出无限迴圈,所以就先用for,但我没考虑到用sleep的情况可以很容易做暂停2.content = content[1:] + content[0]的做法很棒,完全没想到的降纬打击
3.写一个function来把整个code包起来执行的方式也很棒,明明才刚学过但没想到
自己写一遍
import osimport timedef main(): doge='૮ ˙ ﻌ˙ ა૮ ⚆ω⚆ა૮ ♡ω♡ა' scene=' ' while True: for i in range(len(scene)): os.system('clear') time.sleep(1) content=scene[0]+doge[:8]+scene[1:] print(content)if __name__=='__main__': main()
原本想写出会动+每一动变一个表情的狗勾,但是有点卡住了
可是要上班了..下班再继续好ㄌ
==下班ㄌ==
明天早开要六点到,所以今天只剩一小时可以coding...估计进度是不会太多
今天在闲暇的时候一直在思考要怎么帮小狗换头
想来想去还是觉得要建立一个一堆空白键的字串 然后拿狗头去取代其中一格
但是就会遇到TypeError因为字串不可改变
问狗之后找到一个方法
https://stackoverflow.com/questions/10631473/str-object-does-not-support-item-assignment/18006499#18006499
看起来是把空白字串变成列表(list)然后再用列表方法里的join来把狗头加到空白字串里,最后再把他印出来
实作之后有用,果然别人家的脑袋不会让我失望。
下一步就是要让他表情变换
先抓出每个表情的位置:
print(doge[0:8])print(doge[9:16])print(doge[18:24])#用空白键让间隔相等
然后印印看
import timefor i in range(0,24,8): time.sleep(1) print(doge[i:i+8]) if i==24: i=0
因为这边的if好像没作用到(不知道为什么,但不要不求甚解,之后有空要回来用原因取代这个括弧),试试看用while包起来之后
成功!刚好一小时也到了~来去睡觉 晚安
明天的目标就是做一个会动的双字串
今天的目标是做一个双字串~希望能在一小时内完成!
==本日0进度QQ
不过也不是说全无收穫,我发现原本想错方向,其实只要把老师的code里面的content加入佔位符号就可以达成两个字串合併在一起的功能,但产生了新的问题:
占位符只能叫出数字,虽然试过能叫出我的小狗表情(函数),但是执行后程式不会同时执行小狗函数与跑马灯而是只有执行函数不执行跑马灯,但明明函数与跑马灯的content是同一个内容?
而且如果占位符内容输入的是数字的话数字就会成为跑马灯的一部分,好奇怪
或许问题是出在1.小狗表情的函数内容 2.函数里包函数会有先执行里面的函数再执行其他内容的先后顺序问题
==好想放弃的分隔线==
明明看起来就写得出来,只是把一个跑马灯印出来,并且其中一个字符随时间做调整,为何就是做不出来QQ
很想在这里写「结论=做不出来」然后跳下一个练习,但我觉得这样跳过的话下次遇到难题我是不是也要这样跳过了..
===结果
后来发现了佔位符可以使用.format来带入想印的表情,然后再执行跑马灯,这样就不用在函数内执行函数避免未知的先后顺序问题。
import osimport timedoge='૮ ˙ ﻌ˙ა૮ ⚆ω⚆ ა૮ ♡ω♡ ა'def main(): content = '{}{}{}'.format('╰',doge[0:7],'╮') while True: if content[3]=='♡': content = '{}{}{}'.format('╭',doge[0:7],'╯') elif content[3]=='˙': content = '{}{}{}'.format('╰',doge[7:14],'╮') elif content[3]=='⚆': content = '{}{}{}'.format('╰',doge[14:21],'╮') # 清理屏幕上的输出 os.system('clear') print(content) # 休眠200毫秒 time.sleep(1)# content = content[3:]+content[:2] if __name__ == '__main__': main()
这次的心得:
下次可以把想法先写成一个流程,这样不管在找问题还是试着输出东西时都比较不会浪费时间在确认自己回到了哪个步骤