2.2思考與練習(p46)
答案:
2.4:C (不能以數字開始)
2.5:保留字即關鍵字(p39)
2.6:
print (input("")) #簡單的輸入輸出
2.7:簡單點說就是無法區分變數名和數字型別,
具體解釋:
如果允許變數名開頭是數字,則無法區分變數名和數字型別,例如:如果變數名 091合法,則程式無法區分這個變數和數字 091,另外,有些數字可能含有字母,如浮點數 1E10,程式設計語言不能存在歧義,因此,需要約定變數名開頭不能是數字,以便區分變數與數字
2.3思考與練習(p49)
答案:
原程式運行結果:

2.8:蛇的顏色變為粉紅色

2.9:增加了蛇的長度,由4變為5

2.10:會有一條黑色的直線線從起始位置向左邊延伸250像素,但由于畫筆尺寸為25較粗,所以運行結果視覺上并不會有變化



2.4思考與練習(p55)
2.11:請使用turtle庫的turtle.fd()函式繪制一條直線,
import turtle
# turtle.hideturtle() #可去掉箭頭
turtle.fd(200)
turtle.done()
運行結果:

2.12 請使用turtle庫中的turtle.circle()函式繪制一個完整的圓,
import turtle
turtle.hideturtle() #可去掉箭頭
turtle.circle(40) #圓的半徑為40
turtle.done()
運行結果:

2.13請使用turtle庫函式繪制一個包含9個同心圓的靶盤,
from turtle import *
pensize(5) #畫筆寬度5
pencolor("red") #畫筆顏色為紅色
penup() #包括以下兩行只是因為圓的半徑太大需要全屏才能看見(可能因為我電腦尺寸太小),我又懶得全屏,所以讓畫筆下移200像素,可注釋掉
goto(0,-200)
pendown()
for i in range(200,20,-20):
circle(i)
left(90) #畫筆左轉90°,即向上,便于下邊上移20像素
penup() #penup(),pendown()分別對應抬起畫筆,落下畫筆,如果直接fd(20)則會留下一條直線,課本p51有簡單解釋
fd(20) #畫筆移動20像素
pendown()
right(90) #再右轉回來
hideturtle() #取消掉最后的畫筆,如不介意也可注釋掉
done()
運行結果:

此題有更簡便的方法,也可先畫最里面的圓,再依次向外擴展,代碼如下(因為只改了少量代碼,就沒再注釋):
from turtle import *
pensize(5)
pencolor("red")
j = 20
for i in range (10):
circle(i * j)
right(90)
penup()
fd(j)
left(90)
pendown()
hideturtle() #取消掉最后的畫筆,如不介意也可注釋掉
done()
程式練習題:
2.1
實體1的修改,改造實體代碼1.1,采用eval(input(<提示內容>))替換現有的輸入部分,并使輸出的溫度值為整數,
TempStr = eval(input("請輸入溫度值")) #eval可將字串轉化成字典、串列和元組
Str = input("請輸入溫度值符號F或者C: ")
if Str in ['F','f']:
c = (TempStr-32)/1.8
print("轉化后的溫度是{:.0f}".format(c)) #輸出為整數就是{:.0f}
elif Str in ['C','c']:
F = 1.8*TempStr + 32
print("轉化后的溫度是{:.0f}".format(F))
else:
print("輸入格式錯誤")
關于eval的使用:eval
運行結果:

2.2匯率兌換程式,按照溫度轉換程式的設計思路,按照1美元=6人民幣匯率撰寫一個美元和人民幣的雙向兌換程式,
TempStr = eval(input("請輸入貨幣值:")) #eval可將字串轉化成字典、串列和元組
Str = input("請輸入貨幣符號$或者¥(美元為$,人民幣為¥):")
if Str in ['$']:
c = TempStr*6
print("轉化后的人民幣是{:.2f}¥".format(c)) #因為貨幣值不一定為整數,因此保留兩位小數
elif Str in ['¥']:
c = TempStr/6
print("轉化后的美元是{:.2f}$".format(c))
else:
print("輸入格式錯誤")
運行結果:


2.3 實體2的修改,改造實體代碼2.1,繪制一條彩色蟒蛇,即在繪制Python蟒蛇的每個小段時,畫筆的繪制顏色會發生變化,
import turtle
turtle.setup(650,350,200,200) #視窗位置setup(width, height, startx, starty)
#width -- 如為一個整型數值,表示大小為多少像素,如為一個浮點數值,則表示螢屏的占比;默認為螢屏的 50%
#height -- 如為一個整型數值,表示高度為多少像素,如為一個浮點數值,則表示螢屏的占比;默認為螢屏的 75%
#startx -- 如為正值,表示初始位置距離螢屏左邊緣多少像素,負值表示距離右邊緣,None 表示視窗水平居中
#starty -- 如為正值,表示初始位置距離螢屏上邊緣多少像素,負值表示距離下邊緣,None 表示視窗垂直居中
turtle.penup()
turtle.fd(-250) #畫筆左移250像素
turtle.pendown()
turtle.pensize(25) #畫筆寬度25
turtle.seth(-40) #設定畫筆朝向 seth(X),X為角度,逆時針為正,即最上邊為90.最下邊為270/-90
turtle.pencolor("purple")
for i in range(4):
turtle.circle(40,80) #circle(radius(半徑), extent(弧度), steps(以radius為半徑圓的內切多邊形邊數))
turtle.circle(-40,80)
if(i%2==0): #判斷段數是否為偶數,若為偶數及為藍色
turtle.pencolor("blue")
else: #從第二段開始,若為奇數段即為黃色
turtle.pencolor("yellow")
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
運行結果:

2.4等邊三角形的繪制,使用turtle庫中的turtle.fd()函式和turtle.seth()函式繪制一個等邊三角形,
from turtle import *
pensize(5) #畫筆寬度25
pencolor("red")
fd(200) #三角形邊長60
seth(120) #旋轉角度為120
fd(200)
seth(-120)
fd(200)
done()
運行結果:

2.5疊加等邊三角形的繪制,使用turtle庫中的turtle.fd()函式和turtle.seth()函式繪制一個疊加等邊三角形,
from turtle import *
pensize(5) #畫筆寬度25
pencolor("red")
seth(-120)
fd(100)
seth(0)
fd(100)
seth(120)
fd(100)
seth(0)
fd(100)
seth(-120)
fd(100)
seth(0)
fd(100)
seth(120)
fd(200)
seth(-120)
fd(100)
seth(0)
done()
運行結果:

我水平不行,寫不短,只用seth()和fd()實在太長了,若它的小箭頭不是在這個位置這個方向,用right,abs(pos())會簡短一點代碼,等我再學習學習,有更簡便的方法再更新(這個的關鍵其實就是幾何問題,只要算好角度,其實很簡單)
2.6 五角正方形的繪制,利用turtle庫函式繪制一個沒有角的正方形,
from turtle import *
pensize(5) #畫筆寬度25
pencolor("red")
for i in range(3): #也可以直接把3改為4,去掉下面的四行,這樣跟課本上的區別就是少了個小箭頭,(我這個強迫癥就非要跟書上一樣)
penup()
fd(40)
pendown()
fd(160)
penup()
fd(40)
pendown()
left(90)
penup()
fd(40)
pendown()
fd(160)
done()
運行結果:

2.8正方形螺旋線的繪制,利用turtle庫繪制一個正方形螺旋線,
from turtle import *
pensize(5) #畫筆寬度25
pencolor("red")
for i in range(6): #畫6個三角形
fd(100) # 六角形邊長100
left(120)
fd(100)
left(120)
fd(100)
left(120) # 畫完一個三角形
fd(100)
right(60) # 正六邊形一個內角120°,因此轉60度換方向
done()
運行結果:

2.8 正方形螺旋線的繪制,利用turtle庫繪制一個正方形螺旋線,
from turtle import *
pensize() #這個畫筆不宜太寬,就沒設定尺寸
pencolor("red")
j = 10
n = 5
for i in range(51): #若達到與課本上一樣的位置,range(X),X一定要是三的倍數
left(90)
fd(j)
j = j+n
seth(0) #轉換小箭頭方向(強迫癥)
done()
運行結果:

2.9 自定義Python蟒蛇繪制,根據實體2的設計思想,結合讀者喜好,繪制一條區別于實體2的Python蟒蛇,
作者的喜好就是換個顏色,把purple換成blue,就這樣,因為太簡單就不貼代碼了,
總結一下:第二章主要還是turtle庫的運用,在第一章的結尾,已經貼了turtle的官方解釋,但官方的解釋始終有點抽象,具體的用法還要在具體的解題運用中感悟,
另外一點題外話,編程語言的學習在我看來還是要自己去寫代碼,創造屬于自己風格的代碼,現在的大多數題網上都可以找到答案,但每個人寫代碼的思路不一樣,或許每一題的答案你都可以理解,但你不可能每一次找到的答案都是一個人寫出來的,這樣很大可能導致只記住了一道題的答案,出現新的問題時,一旦找不到答案就沒有自己的思路,所以我認為,面對一個問題,一定要根據自己的知識儲備先嘗試自己解題,寫不出來時再去找答案,理解別人的代碼后再用自己的風格寫出來,當然看別人的代碼最大的好處應該就是可以打開思路,幾乎每道題的答案都不唯一,不同的解題方法可以讓你的思路更加開闊,不拘泥于一條腦回路,(以上種種僅代表個人看法,如有不同意見,別杠,杠就是你贏,)
注:寫博客只是為了當筆記看,有任何問題可以評論說,一起互相交流學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250227.html
標籤:python
上一篇:Python 編程1000例(1):判斷閏年和模擬加載進度條
下一篇:Python實作淘寶秒殺
