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 ): # 判斷參數是否為整數(全為數字)
- ok = 1+
for i in strInput: for i in strInput:
- if i<'0' or i>'9':+ if i<'0' or i>'9' :
- ok=0+ if i!='-': # 讓負數也可輸入
- break+ return 0
- return ok+ return 1
def isPrime(chkN): def isPrime(chkN):
- if isInt(chkN) :+ if isInt(chkN) : chkN=string.atol(chkN)
- chkN=string.atol(chkN)+ else: raise ValueError("%s 並不是整數!" %(chkN) )
- else:+
- raise ValueError("%s isn't an interger!" %(chkN) )+
- if chkN == -1:+ if chkN == -1: return 1 # -1 是質數(1, -1)
- return 1+ if chkN <-1 : return 0 # -2 以下皆不是質數(1, -1, self, ...)
- if chkN <-1 :+ if chkN == 0 : return 0 # 任意數*0 = 0
- return 0+ if chkN == 1 : return 0 # 1 不是質數
- if chkN == 0 :+ if chkN == 2 : return 1 # 2 唯一的偶數質數
- return 0+ if ( chkN % 2 )==0 : return 0 # 其他偶數皆不是質數
- if chkN == 1 :+
- return 0+
- if chkN == 2 :+
- return 1+
- if ( chkN % 2 )==0 :+
- return 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=sun+2+ sun+=2
return 1 return 1
 +# 程式進入點
while(1): while(1):
try: try:
- print "Please enter a number to be checked, or type exit to exit"+ print "請輸入一個數以檢查它是否為質數, 要離開請打 exit",
input = raw_input() input = raw_input()
- if input == "exit":+ if input == "" or input == "exit" : exit()
- exit()+ if isPrime(input) : print input, "是個質數"
- if isPrime(input) :+ else: print input, "不是!!"
- print input, "is a prime"+
- else:+
- print input, "isn't!!"+
except ValueError, err: except ValueError, err:
print err print err
- print "Please retype a number"+ print "輸入錯誤,請重打一遍"
</pre> </pre>

在2008年12月8日 (一) 02:34所做的修訂版本

本條目所指的 Python 是 Python 程式語言

目錄

概覽

Python 官方網站對 Python 的介紹

A Byte of Python 對 Python 的簡介(中譯版)

Marr 對 Python 的簡介

根據 2008 年 11 月 TIOBE Programming Community Index,Python 的普及率在全世界排名第 6

免費電子書

Python 官方文件

A Byte of Python

A Byte of Python 中譯版

下載

官方網站下載

校內下載

參考資料

Python 官方網站

Swaroop C.H.'s Python Notes

練習

檢查一個數是否為質數

  • 題目

由使用者輸入一個整數,然後判斷其是否為質數。

參考解答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'

附註:

  1. FreeBSD 上有一支程式 primes (/usr/games/primes) 可幫我們列出質數以供測試,如: primes 100 200 可列出 100 到 200 間的質數
  2. 根據 維基百科英文版對質數的介紹,有一個 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)