主題

從零開始的python ep.2 用內建運算符號做簡單計算

黑子 | 2021-03-09 13:30:01 | 巴幣 2 | 人氣 74

ㄍ這次沒什麼私人資訊,就轉公開了
(Ep.1 沒有python太多內容,主要是記錄自己為何開始學python的動機)

關於雞兔同籠的計算
首先會輸入 N M兩數,分別是動物的頭數跟腳數
要先把數字轉成字串再提出來也就是藍字的區塊
n=[eval(i) for i in input().split()]       #這裡用到推導式的概念,可以跳到ep.6
N=int(n[0])
M=int(n[1])
y=M*0.5-N                                      #這邊是直接抄孫子算經的解法 腳數除以二減去頭數就是兔子的數量
x=2*N-M*0.5

if x>=0 and y>=0 and int(x)==x:     #本來想用 if x<0 and y<0: print("NO")
    print("YES\n",int(x)," ",int(y),sep="")  
#但是有非整數問題,而且用反向的條件不足以選出範圍(不過其實還是可以)
#限定正數,然後整數的正向範圍設定比較單純
else:
    print("NO")
#關於孫子算經的推算
#x+y=N 2x+4y=M,得到4y=M-2X,又 x=N-y,推出4y=M-2(N-y)
#得到4y=M-2N+2y,2y=M-2N 也就得到y=M/2-N

另一種開頭的寫法
str_n=input().split()
N=eval(str_n[0])       #eval用int取代也可以
M=eval(str_n[1])

關於雞兔同籠的計算,在條件設定上有沒有更短的呢? 有
a,b=map(int,input().split())
print('NO' if b<(2*a) or 4*a<b or b%2==1 else 'YES\n%d %d'%(2*a-b/2,b/2-a))   #但我有看沒懂,這裡用到後面章節字串格式化


關於XY座標給三點求面積
import math                               #沒有import.math 的話,可以用**0.5來做根號運算
a=[eval(i) for i in input().split()]   #用eval將輸入的座標先轉成字串
b=[eval(i) for i in input().split()]
c=[eval(i) for i in input().split()]
x1=float(a[0])                             #將座標以小數形式從字串提出來
y1=float(a[1])
x2=float(b[0])
y2=float(b[1])
x3=float(c[0])
y3=float(c[1])
S1=math.sqrt((x1-x2)**2+(y1-y2)**2)    #求出各邊邊長
S2=math.sqrt((x3-x2)**2+(y3-y2)**2)
S3=math.sqrt((x3-x1)**2+(y3-y1)**2)
sp= (S1+S2+S3)/2                       #semi-perimeter 用sp代替半周長
area=math.sqrt(sp*(sp-S1)*(sp-S2)*(sp-S3))
print("%.2f"%area)

看也知道,藍色的部分太辛苦了,所以我翻了一下看有沒有比較簡單的寫法
a,b= map(float, input().split())    #a,b 就是x1 y1 以下列推,用map取出來快多了(雞兔同籠最後的算法也是用map)
c,d = map(float, input().split())
e,f = map(float, input().split())  
A = math.sqrt((a-c)**2+(b-d)**2) #A就是兩點座標求出長度,後面做法相同
.....
....


關於成績調分
請將原始成績開根號乘以十,並且呈現下列格式
Original: 36
Adjusted: 60(+24)
以下列出解法
a = float(input())
print('Original: %.2f' %a)
b = a**0.5*10
print('Adjusted: %.2f(+%d)' %(b, round(b-a, 0)))
#最後這行寫法比較特殊(少見多怪),%.2f是針對b,(+%d)是對應round(b-a,0)

底下附上兩種不同寫法
import math
grade = float(input())
adjusted_grade = math.sqrt(grade)*10
gap = round(adjusted_grade - grade)
print("Original:","%.2f"%(grade))
print("Adjusted:","%.2f"%(adjusted_grade)+"(+"+str(gap)+")")

import math
s = int(input())
print("Original: %.2f"%(s))
a = math.sqrt(s)*10
d = round(a-s)
print("Adjusted: %.2f(+%d)"%(a,d))

格式化跟迴圈後續的章節會陸續介紹,這邊的運算練習可以跳過
送禮物贊助創作者 !
0
留言

創作回應

西陵珩
:O
2021-03-09 17:31:13
黑子
:o
2021-03-09 17:54:54

更多創作