月曆
***********************************************20120714*
------------------------------------------------------ 沒有使用Module
import math as MT
def printMyCalendar(mhTolDays,mhStartWeekDay):
print('-----'*7)
print(' Sun Mon Tue Wed Thu Fri Str')
'''每一個印出資料佔5個空格'''
print(' '*mhStartWeekDay,end='')
for i in range(1,mhTolDays+1):
print('{0:5d}'.format(i),end='')
if((i+mhStartWeekDay)%7==0):
print()
'''
只要知道:
1.查詢的該年月的總天數
2.查詢的該年月的1日周幾
'''
strYr=input("please input year:")
intYr=int(strYr)
intMh=int(input("please input month:"))
#查詢年的月份有多少天
if (intMh==2):
if(intYr%400==0 or (intYr%4==0 and intYr%100!=0)):
maxDay=29
else:
maxDay=28
else:
if(intMh==4 or intMh==6 or intMh==9 or intMh==11):
maxDay=30
else:
maxDay=31
'''
蔡勒公式(Zeller's congruence),是一種計算任何一日屬一星期中哪一日的演算法
w:星期(計算所得的數值對應的星期:0-星期日;1-星期一;2-星期二;3-星期三;4-星期四;5-星期五;6-星期六)[註 1]
c:年份前兩位數
y:年份後兩位數
m:月(m的取值範圍為3至14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日要看作2002年的13月1日來計算)
d:日
'''
c=int(strYr[0:2])
y=int(strYr[2:4])
m=intMh
d=1
if(m==1):
y=y-1
m=13
if(m==2):
y=y-1
m=14
'''
Zeller's congruence
[ ]:稱作高斯符號,代表向下取整,即,取不大於原數的最大整數
python 使用 math.ceil()
'''
w=y+(MT.ceil(y/4)+MT.ceil(c/4)-2*c+(26*MT.ceil((m+1)/10))+d-1)
#w可能為負數,所以當出現負數的情況下不能直接mod 7
if (w<0):
w=(w%7+7)%7
else:
w=w%7
printMyCalendar(maxDay,w)
------------------------------------------------------使用 datetime Module
import datetime as DT
def printMyCalendar(mhTolDays,mhStartWeekDay):
print('-----'*7)
print(' Sun Mon Tue Wed Thu Fri Str')
'''每一個印出資料佔5個空格'''
print(' '*mhStartWeekDay,end='')
for i in range(1,mhTolDays+1):
print('{0:5d}'.format(i),end='')
if((i+mhStartWeekDay)%7==0):
print()
'''
只要知道:
1.查詢的該年月的總天數
2.查詢的該年月的1日周幾
'''
LstMD=[31,28,31,30,31,30,31,31,30,31,30,31]
yr=int(input("please input year:"))
mh=int(input("please input month:"))
#輸入年月的1日化成日期格式
YrMhStart=DT.date(yr,mh,1)
#閏年2月29天
if(yr%400==0 or (yr%4==0 and yr%100!=0)):
LstMD[1]=29
#輸入年月的總天數
mhTolDays=LstMD[mh-1]
#print(mhTolDays)
#輸入年月的1日是周幾 0:星期日 1:星期一
mhStartWeekDay=DT.date.isoweekday(YrMhStart)
#print(mhStartWeekDay)
printMyCalendar(mhTolDays,mhStartWeekDay)
------------------------------------------------------使用 calendar Module
import calendar as CD
yr=int(input("please input year:"))
mh=int(input("please input month:"))
"""傳回 tuple1 內含該年月份第1天是星期幾及該月有幾天
如:2021/7 -->(3,31) 此以
周一 = 0 但我們以
週日 = 0
所以TplWeekDays[0]+1
"""
TplWeekDays=CD.monthrange(yr,mh)
print(' Sun Mon Tue Wed Thu Fri Str')
'''每一個印出資料佔5個空格'''
print(' '*(TplWeekDays[0]+1),end='')
for i in range(1,TplWeekDays[1]+1):
print('{0:5d}'.format(i),end='')
if((i+TplWeekDays[0]+1)%7==0):
print()
------------------------------------------------------使用 calendar Module
import calendar as CD
yr=int(input("please input year:"))
mh=int(input("please input month:"))
'''
預設值
0 1 2 3 4 5 6
一 二 三 四 五 六 日
6:周日
希望改成
0 1 2 3 4 5 6
日 一 二 三 四 五 六
'''
CD.setfirstweekday(6)
print(CD.month(yr,mh))
Function Module Package
**********************************************20120714*
------------------------------------------------------Function
>>> def myAdd(a,b):
return a+b
>>> myAdd(7,2)
9
------------------------------------------------------Module / Function
# save as \myMath\myAddSub_module.py
def myAdd(a,b):
return a+b
def mySub(a,b):
return a-b
# save as \myMath\04.py
import myAddSub_module as AS
print(AS.myAdd(7,2))
print(AS.mySub(7,2))
== RESTART: F:\python\myMath\04.py
9
5
#產生模組已編譯好的檔案
# \myMath\__pycache__\myAddSub_module.cpython-39
------------------------------------------------------Module / Class
#save as \myMath\myMulDiv_class.py
class myMulDiv():
def __init__(self,a,b):
self.a=a
self.b=b
self.ans=0
def myMul(self):
self.ans=self.a*self.b
return self.ans
def myDiv(self):
self.ans=self.a/self.b
return self.ans
# save as \myMath\05.py
import myMulDiv_class as MD
obj=MD.myMulDiv(7,2)
print(obj.myMul())
print(obj.myDiv())
==RESTART:F:\python\myMath\05.py====================
14
3.5
#套件,利用資料夾來管理功能相近的模組 *.py
#可以使用 Function 或 Class
#使用時皆以 import 匯入
------------------------------------------------------Package
# \myMath\__pycache__\myAddSub_module.cpython-39
# \myMath\__pycache__\myMulDiv_class.cpython-39
# \myMath\__init__.py (手動建立的空白檔)
# \myMath\04.py
# \myMath\05.py
# \myMath\06.py
# \myMath\myAddSub_module.py
# \myMath\myMulDiv_class.py
# save as \myMath\06.py
import myAddSub_module as AS
import myMulDiv_class as MD
print(AS.myAdd(7,2))
print(AS.mySub(7,2))
obj=MD.myMulDiv(7,2)
print(obj.myMul())
print(obj.myDiv())
=RESTART:F:\python\myMath\06.py======================
9
5
14
3.5
if 敘述
**********************************************201207*
>>> if(3<5):"成立"
'成立'
>>> "成立" if(3<5) else "不成立"
'成立'
列出ASCII 字元
**********************************************201207*
>>> for i in range(0,255+1):
print("{0:5d}={1:1s}".format(i,chr(i)),end='')
if(i%7==0):
print()
0=
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=0 49=1
50=2 51=3 52=4 53=5 54=6 55=7 56=8
57=9 58=: 59=; 60=< 61== 62=> 63=?
64=@ 65=A 66=B 67=C 68=D 69=E 70=F
71=G 72=H 73=I 74=J 75=K 76=L 77=M
78=N 79=O 80=P 81=Q 82=R 83=S 84=T
85=U 86=V 87=W 88=X 89=Y 90=Z 91=[
92=\ 93=] 94=^ 95=_ 96=` 97=a 98=b
99=c 100=d 101=e 102=f 103=g 104=h 105=i
106=j 107=k 108=l 109=m 110=n 111=o 112=p
113=q 114=r 115=s 116=t 117=u 118=v 119=w
120=x 121=y 122=z 123={ 124=| 125=} 126=~
127= 128= 129= 130= 131= 132= 133=
134= 135= 136= 137= 138= 139= 140=
141= 142= 143= 144= 145= 146= 147=
148= 149= 150= 151= 152= 153= 154=
155= 156= 157= 158= 159= 160= 161=¡
162=¢ 163=£ 164=¤ 165=¥ 166=¦ 167=§ 168=¨
169=© 170=ª 171=« 172=¬ 173= 174=® 175=¯
176=° 177=± 178=² 179=³ 180=´ 181=µ 182=¶
183=· 184=¸ 185=¹ 186=º 187=» 188=¼ 189=½
190=¾ 191=¿ 192=À 193=Á 194=Â 195=Ã 196=Ä
197=Å 198=Æ 199=Ç 200=È 201=É 202=Ê 203=Ë
204=Ì 205=Í 206=Î 207=Ï 208=Ð 209=Ñ 210=Ò
211=Ó 212=Ô 213=Õ 214=Ö 215=× 216=Ø 217=Ù
218=Ú 219=Û 220=Ü 221=Ý 222=Þ 223=ß 224=à
225=á 226=â 227=ã 228=ä 229=å 230=æ 231=ç
232=è 233=é 234=ê 235=ë 236=ì 237=í 238=î
239=ï 240=ð 241=ñ 242=ò 243=ó 244=ô 245=õ
246=ö 247=÷ 248=ø 249=ù 250=ú 251=û 252=ü
253=ý 254=þ 255=ÿ
ASCII 整數編號( 0 ~ 127 ),其中分成
(1)半形字(可顯示):編號32~126 一個整數編號 會對應到 一個半形字
(2)控制字元(不可顯示):編號0~31、127 一個整數編號 會對應到 一個控制字元
>>> ord('A')
65
>>> chr(65)
'A'
>>> '\101' //8進制數字
'A'
>>> '\x41' //16進制數字
'A'
目前尚未找到 2進制數字 以跳脫字元輸出 字元
python 有效數字很大所以適合大數據
**********************************************201207*
>>> j=1
>>> for i in range(1,25):
j*=i
print(j)
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
51090942171709440000
1124000727777607680000
25852016738884976640000
620448401733239439360000
print() 格式
**********************************************201207*
>>> print('{0:4s}'.format("ABCD"))
ABCD
>>> print('{0:4s}'.format("ABC"))
ABC
>>> print('{0:4s}'.format("AB"))
AB
>>> print('{0:4s}'.format("A"))
A
//文字靠左對齊
>>> print('{0:6.2f}'.format(123.45))
123.45
>>> print('{0:6.2f}'.format(23.4))
23.40
>>> print('{0:6.2f}'.format(3))
3.00
//以小數點位置對齊
//小數位數要佔2位
//小數點也要佔1位
//整數部分不足補空格
//小數部份不足補0
字元畫圖
----------------------------------------------------------------
>>> for i in range(1,9+1):
for j in range(1,i+1):
print(j,end='')
print()
1
12
123
1234
12345
123456
1234567
12345678
123456789
>>> for i in range(9,0,-1):
for j in range(i,0,-1):
print(j,end='')
print()
987654321
87654321
7654321
654321
54321
4321
321
21
1
>>> for i in range(1,9+1):
print((9-i)*' ',end='')
for j in range(1,i+1):
print(j,end='')
print()
1
12
123
1234
12345
123456
1234567
12345678
123456789
>>> for i in range(1,9+1):
print((9-i)*' ',end='')
for j in range(1,i+1):
print(j,end='')
for k in range(i-1,0,-1):
print(k,end='')
print()
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
計算迴圈執行次數
----------------------------------------------------------------
>>> cnt=0
>>> for i in range(5+1): //0~5
for j in range(5+1): //0~5
cnt+=1
>>> cnt
36
//6*6
>>> cnt=0
>>> for i in range(5+1): //0~5
for j in range(i,0-1,-1): //i~0
cnt+=1
>>> cnt
21
//((6+1)/2)*6
>>> for i in range(5+1): //0~5
for j in range(i+1): //0~i
cnt+=1
>>> cnt
21
//((6+1)/2)*6
5!=5*4*3*2*1 factorial
----------------------------------------------------------------
>>> for i in range(5,1-1,-1):
res*=i
>>> res
120
++++++++++++++Recursion
>>> def fact(x):
res=1
if(x==1):
res=1
else:
res=x*fact(x-1)
return res
>>> fact(5)
120
求GCD
----------------------------------------------------------------
x=int(input("x="))
y=int(input("y="))
print("GCD(",x,",",y,")=",end="")
while x%y !=0:
x,y=y,x%y
else:
print(y)
=========
x=48
y=60
GCD( 48 , 60 )=12
>>> def GCD(x,y):
if(x<y):x,y=y,x
while(x%y!=0):
mod=x%y
x,y=y,mod
else:
return y
>>> GCD(15,18)
3
++++++++++++++Recursion
>>> def GCD(x,y):
if(x<y):x,y=y,x
mod=x%y
if(mod==0):
return y
else:
return GCD(y,mod)
>>> GCD(15,18)
3
Fabonscci 費氏數列 Fibonacci (費波那契數列)
----------------------------------------------------------------
>>> def Fibonacci(n):
n1=0;n2=1
for i in range(0,n+1):
if(i==0):
nn=0
elif(i==1):
nn=1
else:
nn=n1+n2
n1=n2
n2=nn
print(nn,end=' ')
>>> Fibonacci(10)
0 1 1 2 3 5 8 13 21 34 55
++++++++++++++Recursion
>>> def Fabonassi(n):
if(n==0 or n==1):
return n
else:
return Fibonacci(n-1)+Fibonacci(n-2)
>>> Fibonacci(10)
0 1 1 2 3 5 8 13 21 34 55
進制轉換
----------------------------------------------------------------
+++++++++++++++++++++++10轉10
>>> def DectoDec(x):
Lst=[]
while (True):
Lst.append(x%10)
x=x//10
if(x==0):
Lst.reverse()
for i in range(len(Lst)):
print(Lst[i],end='')
break
>>> DectoDec(534)
534
//一直用商數除以10,直到商數為0
//每次除取餘數,得到[4,3,5]
//[4,3,5]反轉後[5,3,4]在輸出
+++++++++++++++++++++++10轉2
>>> def DectoBin(x):
Lst=[]
while (True):
Lst.append(x%2)
x=x//2
if(x==0):
Lst.reverse()
for i in range(len(Lst)):
print(Lst[i],end='')
break
>>> DectoBin(534)
1000010110
+++++++++++++++++++++++10轉8
>>> def DectoOct(x):
Lst=[]
while (True):
Lst.append(x%8)
x=x//8
if(x==0):
Lst.reverse()
for i in range(len(Lst)):
print(Lst[i],end='')
break
>>> DectoOct(534)
1026
+++++++++++++++++++++++10轉16
>>> def DectoHex(x):
Lst=[]
while (True):
Lst.append(x%16)
x=x//16
if(x==0):
Lst.reverse()
for i in range(len(Lst)):
print(Lst[i],end='')
break
>>> DectoHex(534)
216
+++++++++++++++++++++++10轉10
>>> def DectoDec(x):
str1=str(x)
strLen=len(str1)
IntN=0
for i in range(strLen):
IntN+=int(str1[i])*10**(strLen-1-i)
return IntN
>>> DectoDec(534)
534
//5*10^2+3*10^1+4*10^0
+++++++++++++++++++++++2轉10
>>> def BintoDec(x):
str1=str(x)
strLen=len(str1)
IntN=0
for i in range(strLen):
IntN+=int(str1[i])*2**(strLen-1-i)
return IntN
>>> BintoDec(1000010110)
534
+++++++++++++++++++++++8轉10
>>> def OcttoDec(x):
str1=str(x)
strLen=len(str1)
IntN=0
for i in range(strLen):
IntN+=int(str1[i])*8**(strLen-1-i)
return IntN
>>> OcttoDec(1026)
534
+++++++++++++++++++++++16轉10
>>> def HextoDec(x):
str1=str(x)
strLen=len(str1)
IntN=0
for i in range(strLen):
IntN+=int(str1[i])*16**(strLen-1-i)
return IntN
>>> HextoDec(216)
534
+++++++++++++++++++++++小數點後10轉2
>>> def PointDecToBin(x):
flt=x;Lst=[];str1=""
while(flt!=0):
str1=str(flt*2)
Lst.append(str1[:str1.index('.')])
flt=float(str1[str1.index('.'):])
if(len(Lst)>=9):
Lst.append("...")
break
print("0.",end='')
for i in Lst:
print(i,end='')
>>> PointDecToBin(0.625)
0.101
>>> PointDecToBin(0.8125)
0.1101
>>> PointDecToBin(0.875)
0.111
>>> PointDecToBin(0.3)
0.010011001...
>>> PointDecToBin(0.7)
0.101100110...
Python Pattern Program - Printing Stars in Heart Shape
----------------------------------------------------------------
for row in range(6):
for col in range(7):
if (row==0 and col%3!=0) or (row==1 and col%3==0) or (row-col==2) or (row+col==8):
print("*",end="")
else:
print(end=" ")
print()
=========
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
----------------------------------------------------------------
沒有留言:
張貼留言