我們先簡單的載入sys及pyqt4介面相關模組,然後寫個hello world標籤讓它顯示 # -*- coding: UTF8 -*- import sys from PyQt4.QtGui import * from PyQt4.QtCore import * app = QApplication(sys.argv) hello = QLabel('Hello World') hello.show() sys.exit(app.exec_())
python學習心得、練習、教學 易於學習、功能強大,語法清晰易讀, 方便後續維護,與其它語言結合性強。 如jython(java)、ironpython(visual studio),等於可拿別的語言優點來做結合,又有個別稱『膠水語言』
2012年12月11日 星期二
2012年9月23日 星期日
python 第三方擴展模組 安裝包 下載點整理
能在python底下使用 v8 javascript 引擎執行 js
- Home Page: http://code.google.com/p/pyv8/
- Download URL: http://code.google.com/p/pyv8/downloads/list
>>> import PyV8 >>> ctxt = PyV8.JSContext() # create a context with an implicit global object >>> ctxt.enter() # enter the context (also support with statement) >>> ctxt.eval("1+2") # evalute the javascript expression 3 # return a native python int >>> class Global(PyV8.JSClass): # define a compatible javascript class ... def hello(self): # define a method ... print "Hello World" ... >>> ctxt2 = PyV8.JSContext(Global()) # create another context with the global object >>> ctxt2.enter() >>> ctxt2.eval("hello()") # call the global object from javascript Hello World # the output from python script
python re 正則表達式 模組
re模組
限定符說明:
".": 匹配任何字符
"^": 匹配開頭
"$": 匹配結尾
"*": 匹配0次或更多次之前的表達式。貪婪時,匹配盡可能多次
"+": 匹配1次或更多次之前的表達式。等價於{1,}
"?": 匹配0次或1次之前的表達式。等價於{0,1}
"*?,+?,??": 非貪婪匹配
"{m,n}": 貪婪式匹配之前的表達式m到n次
"{m,n}?": 非貪婪匹配之前的表達式m到n次
"\": 將下一個字符轉義
[ABC]: 指定一個字符集
[^ABC]: 指定一個不在範圍內的字符集
"A|B": 匹配條件A或條件B
(pattern): 匹配括號內的表達式,並作為匹配項
(?:pattern): 匹配括號內的表達式,但不作為匹配項
(?#...): 註釋,忽略
(?=pattern): 預查,若之後的內容匹配表達式,則成立
(?!pattern): 預查,若之後的內容不匹配表達式,則成立
(?Ppattern): 給一個匹配項命名
(?P=name): 匹配與之前命名的匹配項內容相同的部分
如:s='12a34a56'
re.findall('12(?P.).*(?P=xxx)56)', s)
(?P.)匹配到a,則(?P=xxx)的內容也必須為a時才pp
(?iLmsux): 設置I,L,M,S,U,or X標記
轉義符說明:
\A: 匹配開頭
\Z: 匹配結尾
\b: 匹配開頭或結尾的空字符串,通常是指單詞邊界 ???
\B: 匹配非開頭和結尾的空字符串,通常是指非單詞邊界???
\d: 匹配一個數字。等價於[0-9]
\D: 匹配一個非數字。等價於[^0-9]
\s: 匹配一個空白字符。等價於[ \t\n\r\f\v]
\S: 匹配一個非空白字符。等價於[^ \t\n\r\f\v]
\w: 匹配一個字母數字字符。等價於[a-zA-Z0-9_]
\W: 匹配一個非字母數字字符。等價於[^a-zA-Z0-9_]
\\: 匹配一個反斜杠
\f: 匹配一個換頁符。等價於\x0C 和 \cL
\n: 匹配一個換行符。等價於\x0A 和 \cJ
\r: 匹配一個回車符。等價於\x0D 和 \cM
\t: 匹配一個制表符。等價於\x09 和 \cI
\v: 匹配一個垂直制表符。等價於\x0B 和 \cK
\xHH: 匹配 HH,其中 HH 為十六進制轉義值
\uHHHH: 匹配 HHHH,其中 HHHH 是一個用四個十六進制數字表示的Unicode字符
常用匹配:
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*\\? \\S*)?$
匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$
模塊使用:
match:
search:
sub: 替換
subn: 替換並返回替換的次數
split: 分隔
findall: 查找所有匹配項
compile:
purge:
escape:
可選參數:
I(IGNORECASE): 忽略大小寫
L(LOCALE): 使用\w,\W,\b,\B時依據本地配置???
M(MULTILINE): 多行,"^"匹配每行的開頭,"$"匹配每行的末尾
S(DOTALL): 使"."匹配包含換行符在內的任意字符
X(VERBOSE): 忽略空白處和註釋內容
U(UNICODE): 使\w,\W,\b,\B依靠UNICODE編碼
限定符說明:
".": 匹配任何字符
"^": 匹配開頭
"$": 匹配結尾
"*": 匹配0次或更多次之前的表達式。貪婪時,匹配盡可能多次
"+": 匹配1次或更多次之前的表達式。等價於{1,}
"?": 匹配0次或1次之前的表達式。等價於{0,1}
"*?,+?,??": 非貪婪匹配
"{m,n}": 貪婪式匹配之前的表達式m到n次
"{m,n}?": 非貪婪匹配之前的表達式m到n次
"\": 將下一個字符轉義
[ABC]: 指定一個字符集
[^ABC]: 指定一個不在範圍內的字符集
"A|B": 匹配條件A或條件B
(pattern): 匹配括號內的表達式,並作為匹配項
(?:pattern): 匹配括號內的表達式,但不作為匹配項
(?#...): 註釋,忽略
(?=pattern): 預查,若之後的內容匹配表達式,則成立
(?!pattern): 預查,若之後的內容不匹配表達式,則成立
(?P
(?P=name): 匹配與之前命名的匹配項內容相同的部分
如:s='12a34a56'
re.findall('12(?P
(?P
(?iLmsux): 設置I,L,M,S,U,or X標記
轉義符說明:
\A: 匹配開頭
\Z: 匹配結尾
\b: 匹配開頭或結尾的空字符串,通常是指單詞邊界 ???
\B: 匹配非開頭和結尾的空字符串,通常是指非單詞邊界???
\d: 匹配一個數字。等價於[0-9]
\D: 匹配一個非數字。等價於[^0-9]
\s: 匹配一個空白字符。等價於[ \t\n\r\f\v]
\S: 匹配一個非空白字符。等價於[^ \t\n\r\f\v]
\w: 匹配一個字母數字字符。等價於[a-zA-Z0-9_]
\W: 匹配一個非字母數字字符。等價於[^a-zA-Z0-9_]
\\: 匹配一個反斜杠
\f: 匹配一個換頁符。等價於\x0C 和 \cL
\n: 匹配一個換行符。等價於\x0A 和 \cJ
\r: 匹配一個回車符。等價於\x0D 和 \cM
\t: 匹配一個制表符。等價於\x09 和 \cI
\v: 匹配一個垂直制表符。等價於\x0B 和 \cK
\xHH: 匹配 HH,其中 HH 為十六進制轉義值
\uHHHH: 匹配 HHHH,其中 HHHH 是一個用四個十六進制數字表示的Unicode字符
常用匹配:
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*\\? \\S*)?$
匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$
模塊使用:
match:
search:
sub: 替換
subn: 替換並返回替換的次數
split: 分隔
findall: 查找所有匹配項
compile:
purge:
escape:
可選參數:
I(IGNORECASE): 忽略大小寫
L(LOCALE): 使用\w,\W,\b,\B時依據本地配置???
M(MULTILINE): 多行,"^"匹配每行的開頭,"$"匹配每行的末尾
S(DOTALL): 使"."匹配包含換行符在內的任意字符
X(VERBOSE): 忽略空白處和註釋內容
U(UNICODE): 使\w,\W,\b,\B依靠UNICODE編碼
python time 模組
time模組
這個模組定義的都是和時間、時鐘、計時相關的內容:
clock():返回第一次調用到當前調用時的計時,是以秒為單位的浮點數
localtime([t]):返回時間的數組,有9個元素(年,月,日,時,分,秒,星期幾,當年的第幾天,是否夏令時),星期一為0
mktime(tlist):是localtime的反函數,將一個9元數組轉成一個浮點時間值,後3個元素,系統會自己調整
sleep(n):掛起線程n秒
strftime(fstring[,t]):格式化顯示時間,fstring常用關鍵字:
%a,%A:星期的縮寫,全拼
%b,%B:月份的縮寫,全屏
%c,%x,%X:本地默認表示法(日期時間,日期,時間)
%Y(%y:2位),%m,%d,%H,%M,%S:年月日時分秒
%w:星期,0為星期天
strptime(string[,format]):將字符串解析為9元素的時間數組
time():返回當前時間值,浮點數
更高級的用法可以使用datetime模組,創建其中的date,time物件,可以進行加減操作,得出timedelta對象。
這個模組定義的都是和時間、時鐘、計時相關的內容:
clock():返回第一次調用到當前調用時的計時,是以秒為單位的浮點數
localtime([t]):返回時間的數組,有9個元素(年,月,日,時,分,秒,星期幾,當年的第幾天,是否夏令時),星期一為0
mktime(tlist):是localtime的反函數,將一個9元數組轉成一個浮點時間值,後3個元素,系統會自己調整
sleep(n):掛起線程n秒
strftime(fstring[,t]):格式化顯示時間,fstring常用關鍵字:
%a,%A:星期的縮寫,全拼
%b,%B:月份的縮寫,全屏
%c,%x,%X:本地默認表示法(日期時間,日期,時間)
%Y(%y:2位),%m,%d,%H,%M,%S:年月日時分秒
%w:星期,0為星期天
strptime(string[,format]):將字符串解析為9元素的時間數組
time():返回當前時間值,浮點數
更高級的用法可以使用datetime模組,創建其中的date,time物件,可以進行加減操作,得出timedelta對象。
python 內建模組 built-in
python 本身內建無需用 import 導入的模組
built-in
eval(expr[,globals[,locals]]):執行一段代碼,並返回結果
exec(expr[,globals[,locals]]):執行一段代碼
execfile(file[,globals[,locals]]):執行一個文件
filter(func,list):使用函數來過濾list,返回滿足要求的list元素組
getattr(obj,name[,default]):獲取對象的屬性,若沒有該屬性,則返回默認值
setattr(obj,name,value):設置對象的屬性,若沒有該屬性,則異常
hasattr(obj,name):返回對象是否有指定屬性
input([prompt]):提示控制臺輸入,必須輸入常量或變量,若想直接輸入字符串,需要使用引號括起來
raw_input([prompt]):提示控制臺輸入,直接輸入數字或字符串
open(filename,mode):打開文件,mode可以為:w,r,a,若想同時讀寫,則加上+,若想以二進制讀寫,則加上b
reload(module):再次導入已導入過的模塊
type(obj):返回一個對象的類型
zip(seq1,...):將若幹個元組進行合並,長度以元組中的最短的為準
built-in
eval(expr[,globals[,locals]]):執行一段代碼,並返回結果
exec(expr[,globals[,locals]]):執行一段代碼
execfile(file[,globals[,locals]]):執行一個文件
filter(func,list):使用函數來過濾list,返回滿足要求的list元素組
getattr(obj,name[,default]):獲取對象的屬性,若沒有該屬性,則返回默認值
setattr(obj,name,value):設置對象的屬性,若沒有該屬性,則異常
hasattr(obj,name):返回對象是否有指定屬性
input([prompt]):提示控制臺輸入,必須輸入常量或變量,若想直接輸入字符串,需要使用引號括起來
raw_input([prompt]):提示控制臺輸入,直接輸入數字或字符串
open(filename,mode):打開文件,mode可以為:w,r,a,若想同時讀寫,則加上+,若想以二進制讀寫,則加上b
reload(module):再次導入已導入過的模塊
type(obj):返回一個對象的類型
zip(seq1,...):將若幹個元組進行合並,長度以元組中的最短的為準
python sys 模組 操作方式
sys模組
系統信息和方法模組,提供了很多實用的變量和方法:
argv:命令行參數List,第一個元素是程序本身路徑
builtin_module_names:Python解釋器導入的模塊 列表
modules.keys():返回所有已經導入的模塊列表
exc_info():獲取當前正在處理的異常類
exc_type、exc_value、exc_traceback:當前處理的異常詳細信息
executable:Python解釋程序路徑
exit(n):退出程序,正常退出時exit(0)
getwindowsversion():獲取Windows的版本
hexversion:獲取Python解釋程序的版本值,16進制格式 如:0x020403F0
version:獲取Python解釋程序的版本信息
maxint:最大的Int值
maxunicode:最大的Unicode值
modules:返回系統導入的模塊字段,key是模塊名,value是模塊
path:返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
platform:返回操作系統平臺名稱
系統信息和方法模組,提供了很多實用的變量和方法:
argv:命令行參數List,第一個元素是程序本身路徑
builtin_module_names:Python解釋器導入的模塊 列表
modules.keys():返回所有已經導入的模塊列表
exc_info():獲取當前正在處理的異常類
exc_type、exc_value、exc_traceback:當前處理的異常詳細信息
executable:Python解釋程序路徑
exit(n):退出程序,正常退出時exit(0)
getwindowsversion():獲取Windows的版本
hexversion:獲取Python解釋程序的版本值,16進制格式 如:0x020403F0
version:獲取Python解釋程序的版本信息
maxint:最大的Int值
maxunicode:最大的Unicode值
modules:返回系統導入的模塊字段,key是模塊名,value是模塊
path:返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
platform:返回操作系統平臺名稱
python os 模組 操作方式
os模組:
os模組包裝了不同操作系統的通用接口,使用戶在不同操作系統下,可以使用相同的函數接口,返回相同結構的結果。
os.name:返回當前操作系統名稱('posix', 'nt', 'os2', 'mac', 'ce' or 'riscos')
os中定義了一組文件、路徑在不同操作系統中的表現形式參數,如
os.sep(文件夾分隔符,windows中是 \ )
os.extsep(擴展名分隔符,windows中是 . )
os.pathsep(目錄分隔符,windows中是 ; )
os.linesep(換行分隔符,windows中是 \r\n )
os中有大量文件、路徑操作的相關函數,如:
listdir(path):列舉目錄下的所有文件
makedir(path):創建文件夾,註:創建已存在的文件夾將異常
makedirs(path):遞歸式的創建文件夾,註:創建已存在的文件夾將異常
remove(filename):刪除一個文件
rmdir(path):刪除一個文件夾,註:刪除非空的文件夾將異常
removedirs(path):遞歸的刪除文件夾,直到有一級的文件夾非空,註:文件夾路徑不能以'\'結束
rename(src,dst):給文件或文件夾改名(可以改路徑,但是不能覆蓋目標文件)
renames(src,dst):遞歸式的給文件或文件名改名
walk(path):列舉path下的所有文件、文件夾
os中與進程相關的操作,如:
execl(path):運行一個程序來替代當前進程,會阻塞式運行
_exit(n):退出程序
startfile(filename):用與文件關聯的程序運行,關聯程序打開後,立即返回
system(cmd):運行一個程序或命令,會立即返回,並在cmd執行完成後,會返回cmd退出代碼
os.path
在不同的操作系統中調用不同的模組,是一個可import的模組,這個模組中提供很多有用的操作:
abspath(path):返回path的絕對路徑,若path已經是絕對路徑了,則保持。
basename(path):返回path中的文件名。
commonprefix(list):返回list中的統一前綴,用於獲得一組字符串的左起相同的內容
dirname(path):返回path中的文件夾部分,結果不包含'\'
exists(path):文件或文件夾是否存在
getatime(path):文件或文件夾的最後訪問時間,從新紀元到訪問時的秒數
getmtime(path):文件或文件夾的最後修改時間
getctime(path):文件或文件夾的創建時間
getsize(path):文件或文件夾的大小,若是文件夾返回0
isabs(path):返回是否是絕對路徑
isfile(path):返回是否是文件路徑
isdir(path):返回是否是文件夾路徑
islink(path):返回是否是快捷方式
join(path1,path2,...):將path進行組合,若其中有絕對路徑,則之前的path將被刪除
normcase(path):轉換路徑中的間隔符
normpath(path):轉換路徑為系統可識別的路徑
realpath(path):轉換路徑為絕對路徑
split(path):將路徑分解為(文件夾,文件名)
splitext(path):將路徑分解為(其余部分,.擴展名),若文件名中沒有擴展名,擴展名部分為空字符串
在操作與系統不支持的對象時,拋出OSError異常。
os模組包裝了不同操作系統的通用接口,使用戶在不同操作系統下,可以使用相同的函數接口,返回相同結構的結果。
os.name:返回當前操作系統名稱('posix', 'nt', 'os2', 'mac', 'ce' or 'riscos')
os中定義了一組文件、路徑在不同操作系統中的表現形式參數,如
os.sep(文件夾分隔符,windows中是 \ )
os.extsep(擴展名分隔符,windows中是 . )
os.pathsep(目錄分隔符,windows中是 ; )
os.linesep(換行分隔符,windows中是 \r\n )
os中有大量文件、路徑操作的相關函數,如:
listdir(path):列舉目錄下的所有文件
makedir(path):創建文件夾,註:創建已存在的文件夾將異常
makedirs(path):遞歸式的創建文件夾,註:創建已存在的文件夾將異常
remove(filename):刪除一個文件
rmdir(path):刪除一個文件夾,註:刪除非空的文件夾將異常
removedirs(path):遞歸的刪除文件夾,直到有一級的文件夾非空,註:文件夾路徑不能以'\'結束
rename(src,dst):給文件或文件夾改名(可以改路徑,但是不能覆蓋目標文件)
renames(src,dst):遞歸式的給文件或文件名改名
walk(path):列舉path下的所有文件、文件夾
os中與進程相關的操作,如:
execl(path):運行一個程序來替代當前進程,會阻塞式運行
_exit(n):退出程序
startfile(filename):用與文件關聯的程序運行,關聯程序打開後,立即返回
system(cmd):運行一個程序或命令,會立即返回,並在cmd執行完成後,會返回cmd退出代碼
os.path
在不同的操作系統中調用不同的模組,是一個可import的模組,這個模組中提供很多有用的操作:
abspath(path):返回path的絕對路徑,若path已經是絕對路徑了,則保持。
basename(path):返回path中的文件名。
commonprefix(list):返回list中的統一前綴,用於獲得一組字符串的左起相同的內容
dirname(path):返回path中的文件夾部分,結果不包含'\'
exists(path):文件或文件夾是否存在
getatime(path):文件或文件夾的最後訪問時間,從新紀元到訪問時的秒數
getmtime(path):文件或文件夾的最後修改時間
getctime(path):文件或文件夾的創建時間
getsize(path):文件或文件夾的大小,若是文件夾返回0
isabs(path):返回是否是絕對路徑
isfile(path):返回是否是文件路徑
isdir(path):返回是否是文件夾路徑
islink(path):返回是否是快捷方式
join(path1,path2,...):將path進行組合,若其中有絕對路徑,則之前的path將被刪除
normcase(path):轉換路徑中的間隔符
normpath(path):轉換路徑為系統可識別的路徑
realpath(path):轉換路徑為絕對路徑
split(path):將路徑分解為(文件夾,文件名)
splitext(path):將路徑分解為(其余部分,.擴展名),若文件名中沒有擴展名,擴展名部分為空字符串
在操作與系統不支持的對象時,拋出OSError異常。
2012年9月21日 星期五
2012年8月11日 星期六
with as
要打開文件,我習慣照書本教的
怕文件不存在,可能還得再加個捕捉錯誤
但有了with as 就方便多了,可以
為了讓class 也能使用,需添加二個函數__enter__和 __exit__
使用模組contextlib,便不用構造__enter__和 __exit__
官方範例
還有一個closing可在抓網頁資料時使用
fobj = open(filename, 'r')
怕文件不存在,可能還得再加個捕捉錯誤
1
2
3
4
5
|
try:
fobj = open(filename, 'r')
except IOError:
pass
|
1
2
|
with open(filename, 'r') as fobj:
do something
|
為了讓class 也能使用,需添加二個函數__enter__和 __exit__
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class A:
def __enter__(self):
print 'in enter'
def __exit__(self, e_t, e_v, t_b):
print 'in exit'
with A() as a:
print 'in with'
in enter
in with
in exit
|
使用模組contextlib,便不用構造__enter__和 __exit__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
>>> from contextlib import contextmanager
>>> from __future__ import with_statement
>>> @contextmanager
... def context():
... print 'entering the zone'
... try:
... yield
... except Exception, e:
... print 'with an error %s'%e
... raise e
... else:
... print 'with no error'
...
>>> with context():
... print '----in context call------'
...
entering the zone
----in context call------
with no error
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from contextlib import contextmanager
@contextmanager
def tag(name):
print "<%s>" % name
yield
print "</%s>" % name
>>> with tag("h1"):
... print "foo"
...
<h1>
foo
</h1>
|
還有一個closing可在抓網頁資料時使用
1
2
3
4
5
6
|
from contextlib import closing
import urllib
with closing(urllib.urlopen('http://www.python.org')) as page:
for line in page:
print line
|
LIST的妙用
在彼得.狼的獸窩 看到一遍文章覺得蠻有趣的!
Java & Python 程式碼疊疊樂之二
內容主要比較 python&java寫輸入一分數判定等級ABCDE那種
這種東西常見的寫法大部分都是:
Grade = ["E","D","C","B","A"];
Score = int(raw_input());
print Grade[int((Score-51)/10)];
Java & Python 程式碼疊疊樂之二
內容主要比較 python&java寫輸入一分數判定等級ABCDE那種
這種東西常見的寫法大部分都是:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Filename: gradingRobotOne.py
grade = raw_input("請輸入分數: ") #利用 raw_input 的函式取得鍵盤輸入
score = int(grade) #從 raw_input 取得的字串類型 (String) 資料,轉換為 int 的類型
print "====================="
print "您輸入的分數為:", score
gradeLevel = "未判定!" #預設成績等級為「未判定!」
#利用判斷式把輸入的成績分等級
if score > 100 or score < 0:
print "分數應該介於 0 到 100 之間!"
elif score <= 100 and score >= 90:
gradeLevel = "A"
elif score <= 89 and score >= 80:
gradeLevel = "B"
elif score <= 79 and score >=70:
gradeLevel = "C"
elif score <= 69 and score >=60:
gradeLevel = "D"
else:
gradeLevel = "F"
print "成績評定為:", gradeLevel #印出評定結果
那有趣的是,我看最後面有一個回文提供的寫法,蠻有智慧的!
Grade = ["E","D","C","B","A"];
Score = int(raw_input());
print Grade[int((Score-51)/10)];
直接利用LIST的特性,判定成績,讓代碼大為減少!!!
擲骰子遊戲
模擬 烤香腸路邊攤 擲骰子遊戲
規則:由雙方各擲一次骰子比大小,一次擲四顆,其中二顆需要同點數,計算另二顆相異點數總和,如四顆同點數,則為最大稱為「一色」,三點則為最小。
規則:由雙方各擲一次骰子比大小,一次擲四顆,其中二顆需要同點數,計算另二顆相異點數總和,如四顆同點數,則為最大稱為「一色」,三點則為最小。
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
|
# -*- coding: UTF-8 -*-
import random
def score_count(point):
score = 0
check = len([i for i in set(point)])
if check == 1:
score = 19
elif check == 2:
if point.count(max(point)) == 2:
score = max(point) * 2
else:
score = 0
elif check == 3:
for i in point:
if point.count(i) == 1:
score += i
else:
score = 0
return score
def rand_dice(name):
i = 1
score = 0
while not score:
point = [random.choice(dice) for c in range(4)]
score = -1
score = score_count(point)
print "%s第 %s 次,擲出:" % (name, i), point
if score == 19:
print "一色"
else:
print score, "點"
i += 1
return score
print "***擲骰子遊戲***"
win, lose = 0, 0
dice = [i for i in range(1,7)]
while 1:
c_score = rand_dice('電腦')
play = raw_input('請按Enter擲骰子')
u_score = rand_dice('玩家')
if c_score > u_score:
print '你輸了!'
lose += 1
elif c_score < u_score:
print '你贏了!'
win += 1
else:
print '平手!'
print '目前戰績%s勝%s負' % (win, lose)
play = raw_input('是否繼續(y/n)?')
if play in ('n', 'N'):
print '目前戰績%s勝%s負' % (win, lose)
print 'Good Bye!'
break
else:
pass
|
訂閱:
文章 (Atom)