上週買了本書叫《趣學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