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=806s
num = 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的倍數 迴圈的思考邏輯還要再強化