import math #導入數學
radius=eval(input()) #半徑
print("Diameter","=","%.2f"%(radius*2)) #直徑
print("Perimeter","=","%.2f"%(radius*2*math.pi)) #圓周長
#直徑*PI
print("Area","=","%.2f"%(radius**2*math.pi))
#面積:半徑*半徑*PI之前剛學函數時,以為在return之後可以加入print的寫法, 但這樣是不對的, return僅是回傳funtion的結果 做輸出的話只能寫在funtion內,或者在呼叫funtion後再做輸出, 才是正確的寫法,否則系統報錯的機率會很大。
def f(hours):
hourTable = [0, 2, 4, 6]
feeTable = [30, 50, 80, 100]
fee = 0
print("停車時數:" + str(hours) + "小時")
i = len(hourTable)-1
while (i > 0): # 先找出最高費率區段
if (hourTable[i] < hours):
break
i-=1
while (i >= 0): # 由最高費率區段往下累加
fee += (hours - hourTable[i]) * feeTable[i]
hours = hourTable[i] #上一個級距
i-=1 #下一個級距
print("應繳費用:" + str(fee) + "元整")
n=eval(input())
f(n)def compute(n):
n1 = 0
n2 = 1 #費氏數列前2項必定為0與1
print(f'{n1} {n2}',end=' ')
for i in range(3 ,n+1): #數列前2項已被指定為0與1,故迴圈由3開始
n3 = n1 + n2 #後面的數值必定是其前兩項的和
print(f'{n3}',end=' ')
n1 = n2
n2 = n3 #依序產生數列
n = eval(input())
compute(n)一般執行計算連加或連乘都是用迴圈下去帶, 課本解答提供了另一種解法: a/b二數連加公式: ((a+b)*(b-a+1)/2) 但公式要背(除非能寫出證明&理解) 突然覺得迴圈也有那麼一點點可愛的地方。 (但大多數時間還是挺可惡的)
之前是迴圈卡關,經過期中的洗禮後(強迫自己刷題) 就大約略懂略懂。 現在是串列卡關,語法非.常.不.熟 這題能過也是去爬網路資料得出的結果, (但網路為什麼這樣寫我完全不懂) 後來看到柏均的寫法就大概看的懂, 老師是用另一種寫法:dic(dictionary) 有興趣的同學可以參考: https://medium.com/ccclub/ccclub-python-for-beginners-tutorial-533b8d8d96f3 目前的做法就是看到不懂的就是一列一列的寫註解, 理解/熟悉語法/再刷題。
a = int(input()) #迴圈輸入跑幾次
b = 1 #數值從1開始
c = 0 #設立計數變數
if a==0:
print("n需大於零") #若輸入值為0,輸出
else:
while True: #設立無窮迴圈
if a == 0:
break #若輸入值為0,迴圈中斷
for n in range(1,b+1): #跑迴圈
if b%n == 0: #若b值可被n整除,n是b的因數
c+=1 #計數加1
if c == 2: #若b值%1與%n均可被整除時
#若b值為7,在迴圈數為1與7時同時可被整除,b就是質數
print(b) #b值是質數,輸出
a-=1 #迴圈數-1
b+=1 #若b值已跑到7,下次就從8開始做檢查
c=0 #計數歸0,重新判斷
這題好難,應該可以拿來當成競賽等級的題目了。
要先了解質數的定義(除了1與自身,無法被其他數整除)
我也是請教學長請他寫出註解給我,
我才能看得懂程式,
能夠寫的出質數的判斷式,
這題基本上就解完一半了。
上次解這題時,狀況真的不好,而下週就是期中考。
得了感冒(還燒了2天,很擔心自己沒辦法考期中考)
原本要去醫院掛急診了,但幸好狀況回穩了。
謝謝英喬關心,感謝^_^num = eval(input())
min_num = num
while num != -1:
if num < min_num:
min_num = num
#這行順序很重要,最小值變數需放在前面,繼續與後續輸入值比對
num = eval(input())
if min_num == -1:
print('不存在最小值')
else:
print(min_num)n = int(input())
for i in range(1 ,n+1):
for j in range(0, n-i):
print(" ",end="")
for k in range(0, 2*i-1):
print("*",end="")
print()
以上是我寫的程式:
n = int(input())
for i in range(1 ,n+1):
print(" "*(n-i)+"*"*(2*i-1))
剛發現同學用這個敘述更為簡單,連寫雙層迴圈都不用了,
直接輸出對應的空格數及*號數就好,
真的很棒!l=[]#宣告串列變數
for i in range(5):#迴圈跑5次(對應資料筆數)
l.append(input())#依序加入至串列內容中
print('原來串列內容',l)#輸出
#依序輸出串列內容可以用以下幾種做法:
#1)
for i in l:#建立串列迴圈
print(i)#輸出
#2)
#for i in range(len(l)):或使用funtion len()查詢串列資料
#print(l[i])輸出
#3)
#for i in range(5):print(l.pop(0))
#或使用funtion pop()將list內的資料刪除並彈出/輸出。這題當下我有想到要用條件判斷的做法去寫, 但要準備期中考所以就一直放著。 我準備考試的原則就是把握自己可以拿分的部份, 至於難題或真的讓自己卡關很久的題目就先放著, 待上課時再詢問老師, 這樣也不至於讓自己的時間空轉, 一點心得,希望能對其他同學有些許幫助。
老實說我遇到迴圈的確是卡關了, 尤其是在while迴圈的部份。 這題是用取餘數再取商數依序讀取數字, 再執行判斷式即可計算出5這個數字有幾個, 但老實說我while迴圈沒什麼概念, 還是只能透過大量練習解題去理解內化。 (感謝提供解答的同學) 還有上週四的週中考,我的表現很差, 回家後我自己再解題,其實裡面有八題我是可以解出來的。 除了尋找最小值(解一半), 及數字三角形倒序輸出。 (我猜我是在格式化輸出這部份寫錯,直到現在我還是未解出來) 說出來也不怕同學笑,我.會.怯.場。 我也很習慣(甚至可以說是高度依賴)使用自己的筆電, 如果一但使用公用電腦,我會十分不習慣。 只能再努力試著克服自己的心魔。 但老實說10題內有8題可以靠自己的力量解出來, 代表自己對python真的是能有些許理解的, 這應該是近期內些許能讓自己寬慰的事。
n=int(input())#輸入的秒數
h=n//3600#時
m=(n-(3600*h))//60#扣掉小時後還有幾分
s=(n-3600*h)%60#餘數為秒
a=""#字串連接
if h>0:
a=a+str(h)+"小時"
if m>0:
a=a+str(m)+"分"
if s>0:
a=a+str(s)+"秒"
print(f'{n}秒可轉換為===>{a}',end="")n=int(input())#天數設定
s=0 #迴圈運算值設定
m=5 #m起始值
for i in range (1,n+1):#參數設定
s+=m#累計值運算
print(f'第 {i} 天 存入 {m} 累計 {s}')
m=m*2#m值定義好難
早日康復!!
這題不難,但比較要求格式化輸出一定要學好,
且系統不接受使用tab鍵做跳格定位控制(即便輸出長的都一樣)
如這二行:
print(f'Month Amount')
print(f' {i} {total:.2f}')
詳解請參閱課本p3-26
n = eval(input())
#此數字代表後面測試資料的數量,使用eval函式轉為數值
for i in range(n):
num = eval(input())
#根據使用者輸出的資料測試筆數,去抓取對應次數的測試資料,一樣使用eval函式轉為數值
tmp = num
#建立一個暫存變數
sum = 0
#再建立一個累加變數
while tmp != 0:
#建立一個while迴圈,若tmp不為0則繼續執行
sum += tmp % 10
#累加暫存數%10之後的餘數
tmp //= 10
#取得餘數後,暫存數再取商即為上一位數值(個位數除掉,再取十位數,以此類推)
print(f'Sum of all digits of {num} is {sum}')
#執行輸出
#詳解請參閱課本p3-23/24
#https://www.youtube.com/watch?v=74lhoEzi5po&t=806snum = eval(input())
while num != 0 :
#當使用者數入數值不等於0時:
print(num % 10, end = "")
#執行數字%10(取餘數=即為取下一位數)並不換行(即為反轉順序輸出)
num //= 10
#再取商數,周而復始,直至數值=0,迴圈結束。
#其他應用範例:
#print(input()[::-1])
#列印出最後一個索引值並輸出
#或
#num = input()
#string=''.join(reversed(num))
#print(string)
#使用reversed函式並使用join語法反轉輸出。import math
#使用數學模組下的funtion需要在開頭先撰寫import math,
#將math mode載入
num = eval(input())
#使用者輸出任意數值
if num % 1 > 0:
#若變數無法被1整除,執行以下動作:
print(f'不足1公里額外加計車資')
print(f'{num} 公里的車資為 {(math.ceil(num)-1)*20+60}')
#math.ceil-無條件進位 math.ceil(變數名)
#如輸入4.5 km,有餘數,則無條件進位至5km
#再來計算對應車資
else:
print(f'{num} 公里的車資為 {(num-1)*20+60}')
#反之,即無需無條件進位,及輸出計算之車資。注意此題是三角形內數字為正序輸出的寫法, 注意空格數的輸出, 觀念正確就可順利作答。
day = eval(input())
amount = 5
total = 0
for i in range(1 ,day+1) :
total += amount
print(f'第 {i} 天 存入 {amount} 累計 {total}')
amount = amount * 2
#"amount = amount * 2"這一行code的順序很重要,不能寫在輸出之前,否則第一天就會變成存入10元,
#需要寫在輸出第一次迴圈之後,這樣累加內容才會正確day = 0
#天數需累加,故起始天數為0
m = eval(input())
long = m
while m > 3:
#什麼時候適合使用 while 迴圈?
#不確定要重複執行運算次數, 但有明顯的滿足終止條件
#迴圈數小於3時即終止
less = m / 2
#每天剪去一半
m -= less
#長度每日累減
day += 1
#天數累加
print(f'第 {day} 天剩下 {m} 公尺')
print(f'{long} 公尺的繩子剪去 {day} 天後會少於 3 公尺')此題可以copy迴圈敘述題組#16題(數字三角形)的code做修改, 注意此題是倒三角形與數字為倒序輸出的寫法, 及注意空格數的輸出, 觀念正確就可順利作答。 空閒時間太零散真的非.常,的,討.厭! 每天都睡不飽,每天都覺得時間不夠用!!!!!
輸入n值決定三角型的高度(意亦迴圈數) 再來計算出空格與星號要輸出的數量, 之後再做一次迴圈, 但這次的迴圈起始值就要從n-1開始(才會得到一個完整的菱型) #10.22更新: 看到同學使用reversed()函數(逆序)更為簡單: 只需控制輸出行數即可。 (老師教材中尚未提及,但感謝同學寫出程式碼可供參考,感謝。)
昨晚上串列輸出, 原本對於字串利用變數去拼湊出輸出而感到困擾的我, 今天又再利用時間預計將迴圈輸出的所有題目再裸解一次, #重複裸解練習真的很重要 *3 因為很重要,所以後面*3 每行的程式碼比較重要的部份就用註解一行一行寫給自己看, 但每當真的進入情況時間卻又往往不夠用, 只能再好好的調配時間做練習, 也順便將我練習題目的心得分享出來,希望能幫助跟我有一樣困擾的同學們, 一起加油!
h = eval(input())
for i in range(1 , h+1)
#高度即迴圈數
print(" " * (h-i) + "*" * (2*i-1))
#計算出輸出的空白與星號數量與答案的輸出數相符即可
#無需用到雙迴圈num1 = int(input())
total1 = 0
for i in range(1,num1) :
if num1 % i == 0 :
total1 += i
#計算a數之公因數之總和
num2 = int(input())
total2 = 0
for i in range(1,num2) :
if num2 % i == 0 :
total2 += i
#計算b數之公因數之總和
if total1 == num2 and total2 == num1 :
#若a數公因數之總和=b數、b數公因數之總和=a數
print(f'{num1}和{num2}是友誼數')
else:
print(f'{num1}和{num2}不是友誼數')
#輸入與輸出數值分別取變數名稱區隔開來再做條件判斷即可。d=[0,1]#串列前兩項題目有給。
n=int(input())#變數設定
s=0#迴圈運算值設定
for i in range (n-2):#循環運作n次要扣掉2次
s+=d[(i-1)]+d[(i-2)]#s累加等於題目給的n-1項+n-2項
d.append(s)#加進去串列
print(*d)#輸出d=[]#空串列
while True:#while迴圈設定(起手式)
key=input()#變數輸入設定
if key =="-9999":#假設輸入等於-9999
break#跳離迴圈
d.append(key)#把變數加進去
print('原資料',*d)#輸出"*d"技巧使用
print('數值 6','共出現',d.count("6"),'次')#"count函數使用"d=[]#空串列
for i in range (5):#迴圈參數設定
n=eval(input())#變數輸入設定
d.append(n)#變數丟進去
d.sort()#串列遞增排序(小到大)
d.reverse()#再把他反轉過來(大到小)
print(*d[2:])#輸出後面三個d=[] #設定空串列
for i in range (5): #五筆資料迴圈參數設定
n=eval(input())#變數輸入設定
d.append(n)#把變數丟進去串列
d.sort()#串列遞增排序d=[12345]
print(*d[2:5])#輸出後三位的資料也可以寫print(*d[-3:])d=[]#空串列
for i in range (5):#迴圈參數設定
n=eval(input())#變數輸入設定
d.append(n)#把變數丟進去迴圈裡
print('原資料',*d)#輸出串列 "*d"技巧運用
for i in range (len(d)):#再設定一個迴圈參數
#用len去帶串列共有幾筆資料
print(f'第{i+1}筆{d[i]+5}')#d[i]+5循環輸出
d=[]#先設定一個空的串列
for i in range(5):#迴圈參數設定
key=eval(input())#變數設定
d.append(key)#把變數丟進去串列裡
print("數值",*d)#*d,純粹是技巧,取出數值。
s=sum(d)#函數總和
avg=s/len(d)#除以幾筆資料=平均
print("總和",s) #輸出
print("平均",avg) #輸出l = []
n = eval(input())
total = 1
for j in range(1,n+1):
total *= j
l = [str(i) for i in range(1,n+1)]
print('*'.join(l)+'='+str(total))
這是利用建立串列的方式與使用join funtion將串列分割並加入指定字元。
上週其實也是有類似題目,只是這次老師出的新題改成累乘,
有興趣的同學可以參考看看,把老師上週的code"改一個符號"就是解答了,🐻🈹🐃🅱
謝謝承恩哥教得好,祝恩哥把妹妹順利
好難
我把它想得太複雜了,其實不需要打這麼多行
題目是頗簡單,字元判斷正確就對應何種輸出, 但在指定字元的時候發覺要一個一個打的話實在太麻煩了, 就看了一下課本的解答。 (同學們,老師出這整個題組幾乎可以算是賺積分的題組了, 但還是希望能靠自身的理解力去完成才是正確的做法喔!) 發現原來除了可以指定變數介於何者數值之間, (這也是最常用到的功能) 連"英文字母"都可以指定(包括大小寫)
語法,計算式都對, 卡在四拾五入,跟正確解答差1元, 覺得有點無言... 不知系統是怎麼判定的?
再來複習一下條件判斷有三種情況: 1) if (符合結果才會執行,意即只會有一種結果) 2) if ...else(會有正/反二種結果) 3) if...elif...else(會有多種結果)
n=eval(input())
s=0
for i in range(10,n+1):
s+=(1.0/i)
print("1/10+1/11+1/12+...+1/%d=%.2f"%(n,s))
這題我想複雜了哈哈哈,固定輸出的東西蠻多的,
所以只要設定出最後的加總值就可以了。n=int(input())#n值設定
for i in range (1,n+1):#參數1-n+1範圍設定
print(f"{i}隻兔子,共有{i*4}隻腳")
#一隻兔子四隻腳,輸出吧~~n=int(input()) #n值設定ex.n=3
s=""#字串設定
t=0#迴圈運算使用
for i in range (1,n+1):#設定參數1-n+1範圍
if i!=n:#如果i值不等於n,ex:i=1or2
s=s+str(i)+"+"#那麼輸出s是1+ 【str(i))+"+"】
else:#如果不是上述條件,也就是n=i ex.i=3
s=s+str(i)+"="#那麼輸出s是3= 【str(i))+"="】
t=t+i#總和
print(s+str(t))#輸出n=int(input())#設定輸入幾個值
s=0#迴圈運算使用
for i in range(n):#n個值重複運算
k=int(input())#輸入的值設定
s=s+k#加總
print(s) #輸出h=int(input())#h值設定
for i in range(1,h+1):#參數值設定1-h+1範圍
print(' ' * (h-i) + '*' * (2*i-1))#重複輸出
三角形這關自己已經想到很接近答案了,
但是就是在*的個數想不到怎麼設定輸出,
後來找了一下文章,摁,原來如此阿~
迴圈難就難再怎麼敘述輸出,趁今天放假,
趕快把思緒理一理,加強一下。n=int(input())#設定n值
for i in range (1,n+1):#參數設定1-n+1範圍
if i%3!=0:#不是三的倍數不輸出
print(i)解答是用參數設定(2,n+1,2) code碼更簡略了 自己的方式則是找出2的倍數 迴圈的思考邏輯還要再強化