發表文章

目前顯示的是有「Python」標籤的文章

Zerojudge 基礎題庫a038 數字翻轉(Python)

前言: 這題非常簡單,相信再仔細想想一定可以解出來 那我就來敘述我是如何解出這道題目的。 首先,我們要先設一個變數來存放題目,叫做q。 所以輸入一個數字存入p變數的程式碼是: q = input () 下一步呢,要 設計幾個例子 ,越少越好,可以應付所有的情況。 我有想到三個: q = 12345 q = 50500 q = 00000 通常在寫的時候,我喜歡把 q = input() 先用 q = (數字) 替代,這樣就不用一直打數字,按一下執行就跑出結果了。 但是要注意的是,使用input時, 回傳的東西是字串 ,所以測試時,要寫: q = '數字' 第一部分:當q = '12345'時 字串不容易編輯,所以先把它變成串列 q = '12345' q = list (q) 這樣我們的 '12345' 就會變成 ['1', '2', '3', '4', '5'] 接下來呢,你有非常多種作法,但python有的函數叫 reverse() ,用一下心裡舒暢~ q = '12345' q = list (q) q . reverse() 現在 ['1', '2', '3', '4', '5'] 變成 ['5', '4', '3', '2', '1'] 再使用for迴圈一一輸出,結束! q = '12345' q = list (q) q . reverse() for i in q: print (i,end = '' ) print () 第二部分:當q = '50500'時 我們使用上面的程式,最後會輸出 00505 但題目有要求,前面有0以下應消除 所以結果應該是505 我們可以檢測q的第一項是否為0, 如果為零,把第一項刪掉 。 q =...

Zerojudge 基礎題庫a040 阿姆斯壯數(Python)

圖片
題目要求輸入兩個數字,代表著範圍,並輸出範圍裡的阿姆斯壯數們。如沒有,輸出none。 從上面往下看,只要一有想法,可以直接拋棄這篇文章,追隨你的想法。 1. 什麼是阿姆斯壯數 從題目節錄 所謂 Armstrong number 指的是 一個 n 位數的整數,它的所有位數的 n 次方和恰好等於自己 。 相信你沒有問題 :) 2. 如何開始? 如果是我,我會先 做一個函數,判斷是否為阿姆斯壯數 的函數 3. 如何知道範圍內是否有阿姆斯壯數? 使用for迴圈,直接 窮舉 ,再一一判斷是否為阿姆斯壯數。 4.我要程式碼!! 自己寫才會進步,每人寫出的程式碼都有自己的特色,要好發掘自己的特色。 def spreadNum (num): '''enter a string (integer) and returns the split ('3000' -> ['3', '0', '0', '0']) (list)''' list1 = list (num) return list1 def calSpread (list1): '''input: a list which is splitted (['3', '0', '0']) (list) output: the calculation of the num (integer)''' ans = 0 for i in list1: ans = ans + int (i) ** len (list1) return ans while 1 : try : q = input () except : break q = q . split() button = int (q[ 0 ]) top = i...

Zerojudge 基礎題庫a021 大數運算(Python)

圖片
eval()真是太好用了~ 只是要排除除法的問題有點煩,Python好棒! 程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 while 1 : try : x = input () except : break y = x . split() if y[ 1 ] == "/" : print ( int (y[ 0 ]) // int (y[ 2 ])) else : print ( eval (x))

Zerojudge 基礎題庫a020 身分證檢驗(Python)

圖片
基本上不要把fake打成false就可以了,耐住性子。 程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 def tran_to_number (char): num = ord (char) # A ~ H, 65 ~ 72 -> -55 if num >= 65 and num <= 72 : num = num - 55 # I ,73 -> 34 elif num == 73 : num = 34 # J ~ N, 74 ~ 78 -> -56 elif num >= 74 and num <= 78 : num = num - 56 # O, 79 -> 35 elif num == 79 : num = 35 # P ~ V, 80 ~ 86 -> -57 elif num >= 80 and num <= 86 : num = num - 57 # W -> 32 elif num == 87 : num = 32 # X -> 30 elif num == 88 : num = 30 # Y -> 31 elif num == 89 : num = 31 # Z -> 33 elif num == 90 : num = 33 return num % 10 * 9 + num // 10 while 1 : try : ...

Zerojudge 基礎題庫a017 五則運算(Python)

圖片
只要有碰到字串的題目,都麻煩死了... 這題我做了5個小時,感覺自己在搞混自己,幸好,最後debug出來了 這題有兩個思維我想說,一個是括號,另一個是先乘除後加減。 1.括號 括號是一個棘手的題目,因為一題可能有兩個以上括號,還有可能括中括 那怎麼辦? 舉一個例子好了: (( 1 + 2 ) + ( 3 + 4 )) + 5 先找最右邊的  '('   : (( 1 + 2 ) + ( 3 + 4 )) + 5 然後找她右邊的第一個  ')'  : (( 1 + 2 ) +  (  3 + 4 ) ) + 5 再來我們把()中間的東西運算好,整個替代 ( 3 + 4 ) (( 1 + 2 ) + 7 ) + 5 然後一直重複以下步驟,一直到沒有括號 (( 1 + 2 ) + ( 3 + 4 ) ) + 5 ( ( 1 + 2 ) + 7 ) + 5 ( 3 + 7 ) + 5 10 + 5 最後再計算一次就行了~ 2.先乘除後加減 首先,我們只合併 * / % 這些符號 最後,再合併 + - 這些符號 例如:  2 * 3 + 10 / 5 - 3 % 2 我們先看 * / %  2 * 3 + 10 / 5 - 3 % 2 6 + 10 / 5 - 3 % 2 6 + 2 - 3 % 2 6 + 2 - 1 再看 + - 6 + 2 - 1 8 - 1 7 提示就這些,剩下的自己練習吧 3.程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 6...

Zerojudge 基礎題庫a013 羅馬數字 (Python)

圖片
一、題目重述 這題真的需要好好講一下,因為題目敘述真的好長。 我重新敘述一下題目好了: 輸入: 兩個羅馬數字 輸出: 一個羅馬數字,值為輸入的兩值相減 二、解法大綱 首先,羅馬數字只是用來單純標示他的值,無法做計算 而且電腦只看得懂阿拉伯數字,所以在做計算時,須先把羅馬轉成阿拉伯 因為題目是輸入兩個羅馬數字,無法直接做相減的動作,所以第一步先把羅馬轉成阿拉伯。 轉成阿拉伯後,就可以相減了,記得加絕對值,因為題目說可能第一數比較小。 計算出答案後,最後把它變成羅馬數字,就可以了。 三、解法問題 有兩個問題,也就是題目的主要部分。 1.羅馬轉成阿拉伯 我們先來觀察一個羅馬數字: III 我想聰明的你,這一定是三,那我問: 你怎麼知道? 我先給一下轉換表: I 1  V5  X10  L50  C100  D500  M1000 好,回來正題,III可以看成是 I + I + I 轉換後也就是 1 + 1 + 1,答案是3 再一個羅馬數字 IV 如果你用上面的方法,1 + 5 = 6,可是答案是四耶~ 那是因為羅馬數字有一個特殊的規則, 數碼限制: 同一數碼最多只能連續出現三次,如40不可表示為XXXX,而要表示為XL (羅馬數字 - 維基百科) 如果我們使用IIII來表示4,感覺I太多了,所以用IV來表示,意思是 5 - 1 換一個方式來表達,也就是 -1 + 4 那  MCDXXXVII  呢?我們先把一個一個分開來,變成: M, C, D, X, X, X, V, I, I 接下來,一一轉成數字,變成: 1000, 100, 500, 10, 10, 10, 5, 1, 1 接著,我們使用一個小伎倆: 在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字減小數字 我們先找右邊數字比自己大的,找到就把它變成負的 1000, 100, 500, 10, 10, 5, 1, 1 1000右邊是100,比1000小,不變成負的,下一個 100右邊是500,比100大,把它變成負的(100 => -100) 500右邊是10,...

Zerojudge 基礎題庫a004 文文的求婚 (Python)

圖片
西元年被4整除且不被100整除,或被400整除者即為閏年 => year % 4 == 0 and year % 100 != 0 or year % 400 == 0 如果是True就是閏年 False 則是平年 對!就這樣~ Python 程式碼: 1 2 3 4 5 6 7 8 9 10 while 1 : try : x = int ( input ()) except : break if x % 4 == 0 and x % 100 != 0 or x % 400 == 0 : print ( "閏年" ) else : print ( "平年" )