Python 簡介
出自KMU Wiki
(修訂版本間差異)
在2008年12月7日 (日) 19:33所做的修訂版本 (編輯) 9401144 (對話 | 貢獻) (→參考解答jai166) ←上一個 |
在2008年12月8日 (一) 02:34所做的修訂版本 (編輯) (撤銷) 9401144 (對話 | 貢獻) (→參考解答jai166) 下一個→ |
||
第41行: | 第41行: | ||
<pre> | <pre> | ||
import math | import math | ||
+ | #!/usr/local/bin/python | ||
+ | # -*- coding: cp950 -*- | ||
import string | import string | ||
- | def isInt( strInput ): | + | def isInt( strInput ): # 判斷參數是否為整數(全為數字) |
- | + | ||
for i in strInput: | for i in strInput: | ||
- | if i<'0' or i>'9': | + | if i<'0' or i>'9' : |
- | | + | if i!='-': # 讓負數也可輸入 |
- | + | return 0 | |
- | return | + | return 1 |
def isPrime(chkN): | def isPrime(chkN): | ||
- | if isInt(chkN) : | + | if isInt(chkN) : chkN=string.atol(chkN) |
- | + | else: raise ValueError("%s 並不是整數!" %(chkN) ) | |
- | else: | + | |
- | + | ||
- | if chkN == -1: | + | if chkN == -1: return 1 # -1 是質數(1, -1) |
- | + | if chkN <-1 : return 0 # -2 以下皆不是質數(1, -1, self, ...) | |
- | if chkN <-1 : | + | if chkN == 0 : return 0 # 任意數*0 = 0 |
- | + | if chkN == 1 : return 0 # 1 不是質數 | |
- | if chkN == 0 : | + | if chkN == 2 : return 1 # 2 唯一的偶數質數 |
- | + | if ( chkN % 2 )==0 : return 0 # 其他偶數皆不是質數 | |
- | if chkN == 1 : | + | |
- | + | ||
- | if chkN == 2 : | + | |
- | + | ||
- | if ( chkN % 2 )==0 : | + | |
- | + | ||
- | sun=3 | + | sun=3 # 從3 開始的質數測,不測偶數 |
- | end=math.floor(math.sqrt(chkN))+1 | + | end=math.floor(math.sqrt(chkN))+1 # 測到自己開根號 |
while sun < end: | while sun < end: | ||
- | if ( chkN % sun )==0: | + | if ( chkN % sun )==0: # 整除 |
return 0 | return 0 | ||
- | | + | sun+=2 |
return 1 | return 1 | ||
+ | # 程式進入點 | ||
while(1): | while(1): | ||
try: | try: | ||
- | print " | + | print "請輸入一個數以檢查它是否為質數, 要離開請打 exit", |
input = raw_input() | input = raw_input() | ||
- | if input == "exit": | + | if input == "" or input == "exit" : exit() |
- | + | if isPrime(input) : print input, "是個質數" | |
- | if isPrime(input) : | + | else: print input, "不是!!" |
- | + | ||
- | else: | + | |
- | + | ||
except ValueError, err: | except ValueError, err: | ||
print err | print err | ||
- | print " | + | print "輸入錯誤,請重打一遍" |
</pre> | </pre> | ||
在2008年12月8日 (一) 02:34所做的修訂版本
本條目所指的 Python 是 Python 程式語言
目錄 |
概覽
A Byte of Python 對 Python 的簡介(中譯版)
根據 2008 年 11 月 TIOBE Programming Community Index,Python 的普及率在全世界排名第 6
免費電子書
下載
參考資料
練習
檢查一個數是否為質數
- 題目
由使用者輸入一個整數,然後判斷其是否為質數。
參考解答jai166
import math #!/usr/local/bin/python # -*- coding: cp950 -*- import string def isInt( strInput ): # 判斷參數是否為整數(全為數字) for i in strInput: if i<'0' or i>'9' : if i!='-': # 讓負數也可輸入 return 0 return 1 def isPrime(chkN): if isInt(chkN) : chkN=string.atol(chkN) else: raise ValueError("%s 並不是整數!" %(chkN) ) if chkN == -1: return 1 # -1 是質數(1, -1) if chkN <-1 : return 0 # -2 以下皆不是質數(1, -1, self, ...) if chkN == 0 : return 0 # 任意數*0 = 0 if chkN == 1 : return 0 # 1 不是質數 if chkN == 2 : return 1 # 2 唯一的偶數質數 if ( chkN % 2 )==0 : return 0 # 其他偶數皆不是質數 sun=3 # 從3 開始的質數測,不測偶數 end=math.floor(math.sqrt(chkN))+1 # 測到自己開根號 while sun < end: if ( chkN % sun )==0: # 整除 return 0 sun+=2 return 1 # 程式進入點 while(1): try: print "請輸入一個數以檢查它是否為質數, 要離開請打 exit", input = raw_input() if input == "" or input == "exit" : exit() if isPrime(input) : print input, "是個質數" else: print input, "不是!!" except ValueError, err: print err print "輸入錯誤,請重打一遍"
參考解答mcdlee
#!/usr/bin/env python import math import time x = int(raw_input("enter a number\n")) start = time.clock() a = 2 prime = [2] def say_yes(): print a, 'is a prime number' while a <= x: if a in prime: say_yes() for item in prime: b = a % item if b == 0: break else: say_yes() prime.append(a) a = a + 1 amount = len(prime) print 'There is', amount, 'prime number below', x
參考解答sevenstar
參考解答cch
#!/usr/local/bin/python # This program tests wether an integer is a prime import sys import math import string print 'This program tests wether an integer is a prime' while 1 : sys.stdout.write('Please input an integer: ') s = raw_input() n = string.atol(s) ub = math.sqrt(n) + 1 is_prime = 1 f = 2 while f < ub : if n % f == 0: is_prime = 0 print n, ' has a factor ', f break else : f = f + 1 if is_prime == 1 : print n, ' is a prime' else : print n, ' is not a prime'
附註:
- FreeBSD 上有一支程式 primes (/usr/games/primes) 可幫我們列出質數以供測試,如: primes 100 200 可列出 100 到 200 間的質數
- 根據 維基百科英文版對質數的介紹,有一個 polynomial time 的演算法 AKS
產生個人化訊息
- 題目
假設今天有一個名單(固定)如下:
99001001 趙一忠 99001024 錢二孝 99002015 孫三仁 99051273 李四愛 99181730 周五信
我們需要通知其中若干位同學,只知道他們的學號,請寫一支程式產生如下訊息:
親愛的 {姓名} 同學, 您學校的 e-mail 信箱是 u{學號}@kmu.edu.tw
參考解答cch
#!/usr/local/bin/python import string st = {} f = file('st.txt') while True: line = f.readline() if len(line) == 0: break line.rstrip() e = string.split(line, ' ') st[e[0]] = e[1] f.close() # for sno, name in st.items() : # print "sno = %s name = %s" % (sno, name) print 'Please input a sno ', s = raw_input(); print 'Dear %s,\n Your e-mail is u%s@kmu.edu.tw' % (st[s], s)