《趣學Python編程》習題總結

上週買了本書叫《趣學Python編程》(英文名:Python for kids),昨天看完後把書後面的題都作了下。因爲第一、2章沒有習題,第13章及以後都是描寫實例的章節,所以這個總結性的文章中只包含了第3-12章的習題答案。python

1.個人調試環境編程

我分別在個人Win7上和RedHat上調試過Python:canvas

1)Win7的IDE能夠從Python的官網上下載:windows

https://www.python.org/downloads/windows/less

點擊連接Python 3.4.2→Download Windows x86 MSI installer,能夠下載到文件Python-3.4.2.msidom

2)在RedHat上能夠用yum命令直接安裝python,須要用到turtle的地方,還須要用yum安裝tkinter編輯器

另外,在RedHat上,turtle彈出的窗口會在運行後當即消失,所以我用time.sleep()函數來拖延一些時間方便觀察結果ide

2.關於python腳本的運行函數

1)win7中下載後的IDLE(Python 3.4 GUI - 32 bit),經過File→New打開一個編輯器,輸入代碼後按F5能夠運行ui

2)RedHat中直接輸入命令「python xxx.py」就能夠運行腳本xxx.py了

3.第三章:字符串、列表、元組和字典

1)用列表games列出愛好,用列表foods列出你喜歡的食物,把這兩個列表連在一塊兒並把結果命名爲favorites並打印之

games = ['game0', 'game1', 'game2', 'game3']
foods = ['food0', 'food1', 'food2', 'food3']
favorites = games + foods
print(favorites)

2)有三座建築,每座藏了25個忍者,有兩個地道,每一個藏了40個武士,問一共有多少人能夠投入戰鬥?

building = 3
ninja_per_building = 25
tunnel = 2
samurai_per_tunnel = 40
total = building * ninja_per_building + tunnel * samurai_per_tunnel
print(total)

3)建立兩個變量:一個姓和一個名,建立一個字符串,用佔位符使用這兩個變量打印你名字的信息

namemap = { 
        'Tsybius' : 'A', 
        'Galatea' : 'B', 
        'Gaius' : 'C', 
        'Flavia' : 'D' }

text = "Name %s %s"
print(text % ('Tsybius', namemap['Tsybius']))
print(text % ('Galatea', namemap['Galatea']))
print(text % ('Gaius', namemap['Gaius']))
print(text % ('Flavia', namemap['Flavia']))

4.第四章:用海龜畫圖

1)用turtle的Pen函數建立一個畫布,而後畫一個長方形

import time
import turtle

width = 40
height = 30

t = turtle.Pen()

t.forward(width)
t.left(90)
t.forward(height)
t.left(90)
t.forward(width)
t.left(90)
t.forward(height)

time.sleep(5)

2)用turtle的Pen函數建立一個畫布,而後畫一個三角形

import math
import time
import turtle

t = turtle.Pen()

#畫一個等邊三角形
t.forward(50)
t.left(120)
t.forward(50)
t.left(120)
t.forward(50)
t.left(120)

#把座標換到另外一個位置
t.up()
t.right(90)
t.forward(200)
t.left(90)
t.down()

#畫一個內角分別爲30°、30°、120°的三角形
t.forward(80 * math.sqrt(3))
t.left(150)
t.forward(80)
t.left(60)
t.forward(80)
t.left(150)

time.sleep(5)

3)畫一個沒有角的方格

import time
import turtle

t = turtle.Pen()

#下
t.forward(100)

t.up()
t.forward(50)
t.left(90)
t.forward(50)
t.down()

#右
t.forward(100)

t.up()
t.forward(50)
t.left(90)
t.forward(50)
t.down()

#上
t.forward(100)

t.up()
t.forward(50)
t.left(90)
t.forward(50)
t.down()

#左
t.forward(100)

time.sleep(5)

5.用if和else來提問

1)輸入代碼驗證答案

原代碼

money = 2000
if money > 1000:
    print("I'm rich!!")
else:
    print("I'm not rich")
      print("But I might be later...")

這個代碼是錯誤的,第五行和第六行的開頭應該處於同一列,以下:

money = 2000
if money > 1000:
    print("I'm rich!!")
else:
    print("I'm not rich")
    print("But I might be later...")

2)用if語句判斷一個數是否少於100或大於500,若是這個條件爲真則打印「不是太少就是太多」

#twinkies = 50
#twinkies = 300
twinkies = 550

if twinkies < 100 or twinkies > 500:
    print("Too less or too more")

3)用一個if語句檢查變量money是否在100到500之間,或是1000到5000之間

#money = 250
#money = 2500
money = 9999

if (money >= 100 and money <= 500) or (money >= 1000 and money <= 5000):
    print("money in [100, 500] or in [1000, 5000]")
else:
    print("Neither in [100, 500] nor in [1000, 5000]")

4)建立一組if語句,在變量ninja小於10時打印「我能打過」、小於30時打印「有點難」、小於50時打印「太多了」

ninjas = 5
#ninjas = 10
#ninjas = 30

if ninjas < 10:
    print("I can beat them")
elif ninjas < 30:
    print("It's a little difficult but I can deal with it")
elif ninjas < 50:
    print("Too more ninjas there!")

6.循環

1)解釋下面的代碼會發生什麼

for x in range(0, 20):
    print('hello %s' % x)
    if x < 9:
        break

第一次循環時就因x<9觸發了break,所以只能打印一次 hello 0

2)若是你的年齡是偶數,從2開始打印知道你的年齡爲止,若是是你的年齡是奇數,從1開始

age = 23

start = 2
if age % 2 != 0:
    start = 1

for x in range(start, age + 2, 2):
    print(x)

3)建立一個列表,包含5種不一樣的三明治製做材料,建立一個循環,按順序打印這個列表並寫出順序號

ingredients = ['snails', 'leeches', 'gorilla belly-button lint',
               'caterpillar eyebrows', 'centipede toes']

for x in range(0, 5):
    print("%d %s" % (x + 1, ingredients[x]))

4)月球上你的體重是在地球上的16.5%,假設你每一年增加1公斤,打印將來15年你的體重情況

weight = 9999       #體重
increment = 1       #體重年增量
coefficient = 0.165 #體重轉換系數

for x in range(1, 16):
    print("%d years later: %f" % (x, (weight + increment * x) * coefficient))

7.第七章:使用函數和模塊來重用你的代碼

1)用函數計算題目6.4中你的體重(參數爲當前體重和體重的年增量)

def func_MoonWeight(weight, increment):
    coefficient = 0.165 #體重轉換系數
    for x in range(1, 16):
        print("%d years later: %f" % (x, (weight + increment * x) * coefficient))

func_MoonWeight(30, 0.25)

2)用函數計算題目6.4中你的體重(參數爲當前體重、體重的年增量和統計的年數)

def func_MoonWeight(weight, increment, deadline):
    coefficient = 0.165 #體重轉換系數
    for x in range(1, deadline + 1):
        print("%d years later: %f" % (x, (weight + increment * x) * coefficient))

func_MoonWeight(90, 0.25, 5)

3)用函數計算6.4中你的體重,當前體重、體重的年增量和統計年數都由輸入給出

import sys

def func_MoonWeight(weight, increment, deadline):
    coefficient = 0.165 #體重轉換系數
    for x in range(1, deadline + 1):
        print("%d years later: %f" % (x, (weight + increment * x) * coefficient))

#讀取信息並調用函數
print("Please enter your current Earth weight")
para1 = int(sys.stdin.readline())
print("Please enter the amount your weight might increase each year")
para2 = float(sys.stdin.readline())
print("Please enter the number of years")
para3 = int(sys.stdin.readline())

func_MoonWeight(para1, para2, para3)

8.第八章:如何使用類和對象

1)給Giraffes類增長函數讓長頸鹿左、右、前、後四隻腳移動,經過dance函數打印一整套舞步

class Giraffes():
    #函數:左腳向前
    def funcLeftFootForward(self):
        print('left foot forward')
    #函數:右腳向前
    def funcRightFootForward(self):
        print('right foot forward')
    #函數:左腳向後
    def funcLeftFootBack(self):
        print('left foot back')
    #函數:右腳向後
    def funcRightFootBack(self):
        print('right foot back')
    #函數:原地不動
    def funcStand(self):
        print()
    #函數:跳舞
    def funcDance(self):
        self.funcLeftFootForward()
        self.funcLeftFootBack()
        self.funcRightFootForward()
        self.funcRightFootBack()
        self.funcLeftFootBack()
        self.funcStand()
        self.funcRightFootBack()
        self.funcRightFootForward()
        self.funcLeftFootForward()

reginald = Giraffes()
reginald.funcDance()

2)使用4只Pen對象的turtle畫出一個叉子

import time
import turtle

#線1
t1 = turtle.Pen()
t1.forward(100)
t1.left(90)
t1.forward(50)
t1.right(90)
t1.forward(50)

#線2
t2 = turtle.Pen()
t2.forward(100)
t2.right(90)
t2.forward(50)
t2.left(90)
t2.forward(50)

#線3
t3 = turtle.Pen()
t3.forward(120)
t3.left(90)
t3.forward(25)
t3.right(90)
t3.forward(20)

#線4
t4 = turtle.Pen()
t4.forward(120)
t4.right(90)
t4.forward(25)
t4.left(90)
t4.forward(20)

time.sleep(5)

9.第九章:Python的內建函數

1)運行代碼,解釋結果

a = abs(10) + abs(-10)
print(a)
b = abs(-10) + -10
print(b)

a是數學算式「10+|-10|=10+10」,結果爲20

b是數學算式「|-10|+(-10)=10-10」,結果爲0

2)嘗試用dir和help找出如何把字符串拆成單詞

dir函數能夠返回關於任何值的相關信息

help函數能夠返回關於其參數中描述函數的幫助信息

通過dir和help函數最後肯定的代碼爲:

string = '''this if is you not are a reading very this good then way
to you to have hide done a it message wrong'''

for x in string.split():
    print(x)

3)拷貝文件,這裏採用先讀取信息再寫入到新文件的方式

#讀取文件內容
test_file1 = open("d:\\input.txt")
text = test_file1.read()
test_file1.close()

#將讀取到的內容寫入到一個新文件
test_file2 = open("d:\\output.txt", 'w')
test_file2.write(text)
test_file2.close()

10.第十章,經常使用的Python模塊

1)解釋下面代碼會打印出什麼

import copy

class Car:
    pass

car1 = Car()
car1.wheels = 4

car2 = car1
car2.wheels = 3
print(car1.wheels) #這裏打印什麼? (3)

car3 = copy.copy(car1)
car3.wheels = 6
print(car1.wheels) #這裏打印什麼? (3)

第一個print打印3,由於car1和car2是同一個對象,改一個另外一個也會改

第二個print打印3,由於car3是從car1經過copy獲得的,和car1不是一個對象,修改car3不會同時改變car1

2)將一個信息用pickle序列化並保存到一個*.dat文件中,再從該文件中讀取信息反序列化並打印

import pickle

info = {
    'Name' : 'Tsybius',
    'Age' : 23,
    'hobby' : ['hobby1', 'hobby2', 'hobby3']
}

#序列化寫入文件
outputfile = open('d:\\save.dat', 'wb')
pickle.dump(info, outputfile)
outputfile.close()

#反序列化讀取文件
inputfile = open('d:\\save.dat', 'rb')
info2 = pickle.load(inputfile)
inputfile.close
print(info2)

11.第十一章:高級海龜做圖

1)畫八邊形

import time
import turtle

t = turtle.Pen()
for x in range(1, 9):
    t.forward(100)
    t.left(45)

time.sleep(5)

2)畫一個填好色的帶輪廓的八邊形

import time
import turtle

t = turtle.Pen()

#繪製實心八邊形(紅色)
t.color(1, 0, 0)
t.begin_fill()
for x in range(1, 9):
    t.forward(100)
    t.left(45)
t.end_fill()

#爲八邊形描邊(黑色)
t.color(0, 0, 0)
for x in range(1, 9):
    t.forward(100)
    t.left(45)

time.sleep(5)


3)給出大小size和星星的角數,繪製一個星星

import time
import turtle

#x邊形內角和180*(x-3)

#函數:給出大小和頂點數繪製星星
#size:星星的核心是個等邊多邊形,這是該多邊形的頂點到其中心的距離
#point:頂點數
def funcDrawStar(size, point):
    t = turtle.Pen()
    #調校座標位置
    t.up()
    t.backward(200)
    t.right(90)
    t.forward(100)
    t.left(90)
    t.down()
    #開始畫圖
    t.color(1, 0, 0)
    t.begin_fill()
    for x in range(1, point * 2 + 1):
        t.forward(size)
        if x % 2 == 0:
            t.left(120)
        else:
            t.right(180 * (point - 2) / point - 60)
    t.end_fill()
    
#funcDrawStar(100, 6)
funcDrawStar(100, 9)

time.sleep(5)


12.第十二章:用tkinter畫高級圖形

1)在屏幕上畫滿三角形,位置隨機、顏色隨機

from tkinter import *
import random

color = ["green", "red", "blue", "orange", "yellow",
         "pink", "purple", "violet", "magenta", "cyan"]

tk = Tk()
canvas = Canvas(tk, width = 400, height = 400)
canvas.pack()

#函數:建立隨機位置、隨機顏色的三角形
def funcRandomTriangle():
    x1 = random.randrange(400)
    y1 = random.randrange(400)
    x2 = random.randrange(400)
    y2 = random.randrange(400)
    x3 = random.randrange(400)
    y3 = random.randrange(400)
    fillcolor = random.randrange(10)
    canvas.create_polygon(x1, y1, x2, y2, x3, y3,
        fill = color[fillcolor], outline = "black")

for x in range(0, 15):
    funcRandomTriangle()

2)移動三角形,先向右,再向下,再向左,再向上回到原來位置

import time
from tkinter import *

tk = Tk()
canvas = Canvas(tk, width = 400, height = 400)
canvas.pack()

#建立一個三角形
canvas.create_polygon(10, 10, 10, 60, 50, 35)

#向右移動
for x in range(0, 60):
    canvas.move(1, 5, 0)
    tk.update()
    time.sleep(0.05)

#向下移動
for x in range(0, 60):
    canvas.move(1, 0, 5)
    tk.update()
    time.sleep(0.05)

#向左移動
for x in range(0, 60):
    canvas.move(1, -5, 0)
    tk.update()
    time.sleep(0.05)

#向上移動
for x in range(0, 60):
    canvas.move(1, 0, -5)
    tk.update()
    time.sleep(0.05)

3)移動照片(gif格式)

import time
from tkinter import *

tk = Tk()
canvas = Canvas(tk, width = 400, height = 400)
canvas.pack()

myimg = PhotoImage(file = "d:\\temp.gif")
canvas.create_image(0, 0, anchor = NW, image = myimg)

#向右移動
for x in range(0, 25):
    canvas.move(1, 5, 0)
    tk.update()
    time.sleep(0.05)

END

相關文章
相關標籤/搜索