iT邦幫忙

0

[大概是day8]寫一個跑馬燈

  • 分享至 

  • xImage
  •  

前面在medium寫了幾天,發現沒有人回應,好無聊
後來在查資料的時候發現這裡也可以發文,就來發發看,有人回再把前面po一po
===
因為覺得爬蟲的書真的太難懂了,而且上面的範例又跑不出來

於是這幾天又跑回去讀100天python

目前讀到第7天的[字符串和常用数据结构]

第一個練習他說要我做出一個跑馬燈,沒了
於是我寫了一隻拉長狗

原本想要做類似逐格動畫的效果,但知識不足,不知道印出來的要怎麼消掉,先記錄起來看二刷的時候能不能挑戰寫個會動的狗勾~

結果參考答案裡面就有方法了,而且他的code更加簡潔...每次絞盡腦汁寫的都以為自己是最簡潔了,結果都被降緯打擊...很好奇他到底怎麼做到的呢

不過執行這段code的時候會出現

sh: cls: command not found

餵狗之後發現只要把cls改成clear就可以了
然後這段code的作用是把command裡的指令都擦乾淨,剛好符合我的需求
原本寫的

import time
dog='          ૮ ・ﻌ・ა \n(´_ゝ`)ノ   ノ\n    |   |\n           ˇ   ˇ'

time.sleep(5)
print(dog)
for i in range(10):
    time.sleep(0.6)
    print('         |     |')
print('           ˇ   ˇ')

參考答案

import os
import time


def main():
    content = '北京欢迎你为你开天辟地…………'
    while True:
        # 清理屏幕上的输出
        os.system('clear')
        print(content)
        # 休眠200毫秒
        time.sleep(1)
        content = content[1:] + content[0]


if __name__ == '__main__':
    main()

可以改進的地方:

  1. 一開始有想到要用while但有點怕跑出無限迴圈,所以就先用for,但我沒考慮到用sleep的情況可以很容易做暫停
    2.content = content[1:] + content[0]的做法很棒,完全沒想到的降緯打擊
    3.寫一個function來把整個code包起來執行的方式也很棒,明明才剛學過但沒想到
    自己寫一遍
import os
import time
def 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 time
for 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 os
import time
doge='૮ ˙ ﻌ˙ა૮ ⚆ω⚆ ა૮ ♡ω♡ ა'
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()

這次的心得:
下次可以把想法先寫成一個流程,這樣不管在找問題還是試著輸出東西時都比較不會浪費時間在確認自己回到了哪個步驟


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言