파이썬 프로그래밍의 빠른 시작 - 번거로운 작업을 자동화하기 제15장 실천 프로젝트 답안

4682 단어
15.3 항목: 슈퍼 스톱워치
프로젝트 요구 사항: 간단한 초시계 프로그램을 파이톤으로 직접 쓰기
#! python3
# A simple stopwatch program.

import time

print('Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch. Press Ctrl-C to quit.')
input()
print('Started.')
startTime = time.time()
lastTime = startTime
lapNum = 1

try:
    while True:
        input()
        laptime = round((time.time() - lastTime), 2)
        totalTime = round((time.time() - startTime), 2)
        print('Lap: %s; laptime: %s; totalTime: %s' % (lapNum, laptime, totalTime), end=' ')
        lapNum += 1
        lastTime = time.time()
except KeyboardInterrupt:
    print('
DONE!') input('click any key to exit')

15.7 프로젝트: 멀티스레드 XKCD 다운로드 프로그램
프로젝트 요구: 다중 루틴 프로그램에서 일부 루틴은 만화를 다운로드하고 다른 루틴은 연결을 맺거나 만화 이미지 파일을 하드디스크에 기록합니다.그것은 더욱 효과적으로 인터넷 연결을 사용하고, 더욱 신속하게 이 만화들을 다운로드한다.새 파일 편집기 창을 열고 multidownloadXkcd로 저장합니다.py.너는 이 프로그램을 수정하고 다중 라인을 추가할 것이다.
#! python3
# Downloads XKCD comics using multiple threads.

import os, bs4, requests
urls = 'http://xkcd.com'
os.makedirs('xkcd', exist_ok = True)
def comic_download_kxcd(startComic, endComic):
    for num in range(startComic, endComic):
    # todo: download the page
        url = urls + '/%s/' % num
        print('Downloading page %s...' % url)
        res = requests.get(url)
        try:
            res.raise_for_status()
        except requests.exceptions.HTTPError:
            pass
        soup = bs4.BeautifulSoup(res.text, "html.parser")

    # todo: find the url of comic page
        comicElems = soup.select('#comic img')
        if comicElems == []:
            print('Could not find comic image!')
        else:
            comicUrl = 'http:' + comicElems[0].get('src')
    # todo: download the jpg
            print('Downloading image %s' % comicUrl)
            res = requests.get(comicUrl)
            res.raise_for_status()
    # todo: save jpg to ./xkcd
            image_name = os.path.join('xkcd', os.path.basename(comicUrl))
            with open(image_name, 'wb') as imageFile:
                for chunk in res.iter_content(100000):
                    imageFile.write(chunk)
    # todo: get the prev button's url
        prevLink = soup.select('a[rel="prev"]')[0]

# Create and start the Thread objects.
import threading
comic_threads = []
for i in range(1,1400,100):      # loops 14 times, creates 14 threads
    comic_thread = threading.Thread(target=comic_download_kxcd, args=(i, i+5)) 
    comic_threads.append(comic_thread)
    comic_thread.start()

# Wait for all threads to end.
for comic_thread in comic_threads:
    comic_thread.join()

print('Done.')

아이디어:
  • 멀티스레드 이건 정말 놀랍습니다. 처음 접했을 때'이런 조작이 있었어?!'
  • 책에 나오는 순서대로 한 걸음 한 걸음
  • 15.9 항목: 간단한 카운트다운 프로그램
    프로젝트 요구: 카운트다운 프로그램을 써서 카운트다운이 끝날 때 경찰에 신고합시다.
    #! python3
    # A simple countdown script.
    
    import time, subprocess
    while True:
        try:
            time_l = int(input('Please input a time(seconds): '))
        except Exception:
            print('number please!')
        else:
            break
    
    while time_l > 0:
        print(time_l)       #           end=" "           
        time.sleep(1)
        time_l = time_l - 1
    
    print('
    alert!!') time.sleep(2) a = subprocess.Popen(['start','abc001.txt'], shell=True)

    15.12.1 실천 프로젝트: 미화의 초시계
    프로젝트 요구 사항: rjust () 와 ljust () 문자열 방법으로 '미화' 된 출력을 사용할 수 있도록 이 장의 초시계 항목을 확장합니다.
    #! python3
    # A simple stopwatch program.
    
    import time
    
    print('Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch. Press Ctrl-C to quit.')
    input()
    print('Started.')
    startTime = time.time()
    lastTime = startTime
    lapNum = 1
    
    try:
        while True:
            input()
            laptime = round((time.time() - lastTime), 2)
            totalTime = round((time.time() - startTime), 2)
            print('Lap #' + str(lapNum).rjust(2) + ':' + ('%.2f'%totalTime).rjust(6) + 
            ' (' + ('%.2f'%laptime).rjust(5) +  ')',end=' ')
            lapNum += 1
            lastTime = time.time()
    except KeyboardInterrupt:
        print('
    DONE!') input('click any key to exit')

    15.12.2 실천 프로젝트: 계획된 웹 만화 다운로드
  • 게으름 피우게 해줘
  • 환경:python3
    이 시리즈의 글을 만들고 싶었던 것은 당시 이 책을 읽을 때 인터넷에서 더 좋은 해결책이 있는지 보고 싶었지만 찾기가 어려웠기 때문이다.그래서 자신의 프로젝트 연습을 txt 파일에 넣었습니다. 지금 연습 코드를 여기에 놓았습니다. 부족한 점이 있으면 여러분들이 지도 의견을 제시하고 서로 교류하며 향상시키길 바랍니다.

    좋은 웹페이지 즐겨찾기