內容選單標籤

2019年12月29日 星期日

CH12 程式邏輯發展練習(32-37)



(32).轉置矩陣
X=[[12,7],[4,5],[3,8]]
result=[[0,0,0],[0,0,0]]
for i in range(len(X)):
    for j in range(len(X[0])):
        result[j][i]=X[i][j]

for r in result:
    print(r)

[12, 4, 3]
[7, 5, 8]




(33).產生隨機亂數
import random
for i in range(1,10+1):
    print(random.randint(1,100),end=' ')

82 27 59 8 99 66 38 5 23 11 

>>> dir (random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']




(34).發牌程式
import random
flower='♥♠♦♣'
nstr='A23456789TJQK'
c=[]

for i in range(0,52):
    c.append(i)

for i in range(0,51):
    s=random.randint(0,51)
    temp=c[i];c[i]=c[s];c[s]=temp

for i in range(0,52):
    f=c[i]//13;n=c[i]%13
    print(flower[f:f+1]+nstr[n],end=' ')
    if (i%13==12):
        print()

♥Q ♠Q ♥K ♣5 ♠4 ♣7 ♠2 ♥6 ♦6 ♦2 ♠A ♠J ♠6
♠7 ♥4 ♥8 ♠8 ♠9 ♣J ♦4 ♥7 ♥2 ♥5 ♥A ♠5 ♣K
♠T ♦5 ♦T ♦8 ♦7 ♣8 ♥T ♣3 ♣T ♠3 ♦A ♥J ♦9
♣Q ♣9 ♥9 ♣2 ♣A ♦Q ♦J ♦K ♠K ♥3 ♣4 ♣6 ♦3

#UTF-8中文內碼: 9829、9824、9830、9827
>>> chr(9829)
'♥'
>>> chr(9824)
'♠'
>>> chr(9830)
'♦'
>>> chr(9827)
'♣'

>>> print(ord('♣'))
9827
>>> print(ord('♦'))
9830
>>> print(ord('♠'))
9824
>>> print(ord('♥'))
9829


------亂數發牌花色邏輯說明
import random
flower=['H','S','D','C']
num=['A','2','3','4','5','6','7','8','9','T','J','Q','K']
c=[]

#填數字
for i in range(52):
    c.append(i)
    print('%2d' %c[i],end=' ')
print('\n\n')

#產生亂數
for i in range(52):
    r=random.randint(0,51)
    print(r,end=' ')
print('\n\n')

#印出數字
for i in range(52):
    print(c[i],end=' ')
print('\n\n')

#13張下跳
for i in range(52):
    print('%2d' %i,end=' ')
    if(i+1)%13==0:
        print()
print('\n\n')

#印出花色 數字
for i in range(52):
    print(c[i]//13,c[i]%13,end=' ')
    if (i+1)%13==0:
        print()
print('\n\n')

#印出花色 SHDC 和 數字
for i in range(52):
    f=c[i]//13
    n=c[i]%13
    print(flower[f],num[n],end=' ')
    if (i+1)%13==0:
        print()
print('\n\n')

#印亂數
for i in range(51):
    r=random.randint(0,52)
    c[i],c[r]=c[r],c[i]
    print(c[i],end=' ')
print('\n\n')

#印出花色 和 數字
for i in range(52):
    f=c[i]//13
    m=c[i]%13
    print(f,m,end=' ')
    if (i+1)%13==0:
        print()
print('\n\n')

#印出結果
for i in range(52):
    f=c[i]//13
    m=c[i]%13
    print(flower[f],num[m],end=' ')
    if (i+1)%13==0:
        print()
print('\n\n')


num='A23456789TJQK'
for i in range(13):
    print(num[i:i+1],end=' ')
print()
print(list(num))

pokernumlist=list(num)
print()
for i in pokernumlist:
    print(i,end=' ')



(35).顯示月曆
y=2019
m=1
md=[0,31,28,31,30,31,30,31,31,30,31,30,31]
blk24=24*' '

#算1月1日到輸入月份1日前共幾天
sunday=0
for i in range(0,m):
    sunday=sunday+md[i]

#算輸入月份的1日星期幾?
w=y+y/4-y/100+y/400+sunday
week=int(w%7)
print(' ',y,'年',m,'月')

print(" Sun Mon Tue Wed Thu Fri Sat")
print(blk24[0:week*4],end='')
for i in range(1,md[m]+1):
    print('%4d' %i,end='')
    if ((week+i)%7 ==0):
        print()

  2019 年 1 月
 Sun Mon Tue Wed Thu Fri Sat
           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



import calendar
yy=2019
mm=1
print(calendar.month(yy,mm))

    January 2019
Mo Tu We Th Fr Sa Su
    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




(36).兩個矩陣相加
X=[[2,7,3],[4,5,6],[1,8,9]]
Y=[[4,8,1],[6,7,3],[2,5,9]]
r=[[0,0,0],[0,0,0],[0,0,0]]

for i in range(len(X)):
    for j in range(len(X[0])):
        r[i][j]=X[i][j]+Y[i][j]

for r in r:
    print(r)

----------------或者
for i in r:
    print(i)

[6, 15, 4]
[10, 12, 9]
[3, 13, 18]




(37).兩個矩陣相乘
# 兩個矩陣相乘 (值得思考 有點難度)

'''
https://goo.gl/pP2KbL

可到這裡驗證,本題矩陣相乘 結果
https://goo.gl/2Kjg9i

X =
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)

Y =
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
(2,0) (2,1) (2,2)

X*Y=
x(0,0)*y(0,0)+x(0,1)*y(1,0)+x(0,2)*y(2,0)  x(0,0)*y(0,1)+x(0,1)*y(1,1)+x(0,2)*y(2,1)  x(0,0)*y(0,2)+x(0,1)*y(1,2)+x(0,2)*y(2,2)
x(1,0)*y(0,0)+x(1,1)*y(1,0)+x(1,2)*y(2,0)  x(1,0)*y(0,1)+x(1,1)*y(1,1)+x(1,2)*y(2,1)  x(1,0)*y(0,2)+x(1,1)*y(1,2)+x(1,2)*y(2,2)
x(2,0)*y(0,0)+x(2,1)*y(1,0)+x(2,2)*y(2,0)  x(2,0)*y(0,1)+x(2,1)*y(1,1)+x(2,2)*y(2,1)  x(2,0)*y(0,2)+x(2,1)*y(1,2)+x(2,2)*y(2,2)                                      ...   ...

'''

# 設定 X 陣列
X = [[1,7,3],
    [4 ,5,6],
    [2 ,8,9]]

# 設定 Y 陣列
Y = [[5,8,1],
    [6,7,3],
    [4,2,9]]

result = [[0,0,0],
         [0,0,0],
         [0,0,0]]

print('印出 X')
for i in range(3):
    for j in range (3):
        print(X[i][j], end=' ')
    print()
print()

print('印出 Y')
for i in range(3):
    for j in range (3):
        print(Y[i][j], end=' ')
    print()
print()   

m1=0;m2=0;m3=0
for i in range(3):
    for j in range(3):
        m1=m1+X[i][j]*Y[j][0] ; m2=m2+X[i][j]*Y[j][1] ; m3=m3+X[i][j]*Y[j][2]
       
    result[i][0]=m1           ; result[i][1]=m2       ; result[i][2]=m3
   
    print('%3d %3d %3d' % (m1,m2,m3)) # 印出結果
    m1=0;m2=0;m3=0
    print()

for r in result:             # 印出陣列值
    print(r)

印出 X
1 7 3 
4 5 6 
2 8 9 

印出 Y
5 8 1 
6 7 3 
4 2 9 

 59  63  49

 74  79  73

 94  90 107

[59, 63, 49]
[74, 79, 73]
[94, 90, 107]



CH12 程式邏輯發展練習(21-31)



(21).找數字的因數
def print_f(x):
    print(x,"的因數有:")
    for i in range(1,x+1):
        if x%i==0:
            print(i,end=' ')

num=240
print_f(num)

240 的因數有:
1 2 3 4 5 6 8 10 12 15 16 20 24 30 40 48 60 80 120 240



(22).找出間隔內質數
low=50
up=100
print(low,"至",up," 間隔內所有質數:")

for n in range(low,up+1):
    if n>1:
        for i in range(2,n):
            if(n%i)==0:
                break
        else:
            print(n,end=' ')

50 至 100  間隔內所有質數:
53 59 61 67 71 73 79 83 89 97 


~~~~~~~傳統寫法
low=50
up=100
print(low,"至",up," 間隔內所有質數:")

for n in range(low,up+1):
    f=0;i=2
    while(f==0 and i<((n-1)/2)):
        i=i+1
        if(n%i)==0:
            f=1
    if(f==0):
        print(n,"is prime")

50 至 100  間隔內所有質數:
53 is prime
59 is prime
61 is prime
67 is prime
71 is prime
73 is prime
79 is prime
83 is prime
89 is prime
97 is prime



(23).最大公因數
~~~~~~~輾轉相除
x=12;y=18
if (x>y):
    x,y=y,x

m=x;x=y
while(m>0):
    y=x;x=m;m=y%x

print('GCD=',x)

GCD= 6




(24).函數算GCD - LCM
def gcd(m,n):
    return m if (n==0) else gcd(n,m%n)

def lcm(m,n):
    return m*n//gcd(m,n)

m=56
n=24

print(m,"&",n," 的 GCD= ",gcd(m,n))
print(m,"&",n," 的 LCM= ",lcm(m,n))

56 & 24  的 GCD=  8
56 & 24  的 LCM=  168



(25).印出50階層
fact=1
for n in range(1,51):
    fact=fact*n
    print('%2d!=%d' %(n,fact))

 1!=1
 2!=2
 3!=6
 4!=24
 5!=120
 6!=720
 7!=5040
 8!=40320
 9!=362880
......略




(26).費氏數列
n1=0;n2=1
print(n1,end=' ')
for i in range(1,17):
    print(n2,end=' ')
    n=n2
    n2=n1+n2
    n1=n

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987



(27).找出某區間中阿姆斯壯數
#1~1000之間的阿姆斯壯數
sum=0
for num in range(1,1000):
    temp=num
    while temp>0:
        digit=temp%10
        sum=sum+digit**3
        temp=temp//10
    if num==sum:
        print(num,end=' ')
    sum=0

1 153 370 371 407



#暴力法
import time;
t0=time.time()
for a in range(0,10):
    for b in range(0,10):
        for c in range(0,10):
            res=a**3+b**3+c**3
            dignum=int(str(a)+str(b)+str(c))
            if(res==dignum and res>10**2):
                print(res)
t1=time.time()
print("費時:",t1-t0);print("\n\n")


#避開相同組合的數字
t0=time.time()
n=0
for a in range(0,10):
    for b in range(a,10):
        for c in range(b,10):
            print(a,b,c);n=n+1
            res=a**3+b**3+c**3
            dignum=str(a)+str(b)+str(c)
            if ''.join(sorted(list(str(res))))==dignum:
                print(''.join(sorted(list(str(res)))),dignum,res)

t1=time.time()
print("費時:",t1-t0);print("\n\n") 
print(n)


153
370
371
407
費時: 0.02200007438659668



0 0 0
0 0 1
0 0 2
0 0 3
0 0 4
0 0 5
0 0 6
0 0 7
0 0 8
0 0 9
0 1 1
0 1 2
0 1 3
0 1 4
0 1 5
0 1 6
0 1 7
0 1 8
0 1 9
0 2 2
0 2 3
0 2 4
0 2 5
0 2 6
0 2 7
0 2 8
0 2 9
0 3 3
0 3 4
0 3 5
0 3 6
0 3 7
037 037 370
0 3 8
0 3 9
0 4 4
0 4 5
0 4 6
0 4 7
047 047 407
0 4 8
0 4 9
0 5 5
0 5 6
0 5 7
0 5 8
0 5 9
0 6 6
0 6 7
0 6 8
0 6 9
0 7 7
0 7 8
0 7 9
0 8 8
0 8 9
0 9 9
1 1 1
1 1 2
1 1 3
1 1 4
1 1 5
1 1 6
1 1 7
1 1 8
1 1 9
1 2 2
1 2 3
1 2 4
1 2 5
1 2 6
1 2 7
1 2 8
1 2 9
1 3 3
1 3 4
1 3 5
135 135 153
1 3 6
1 3 7
137 137 371
1 3 8
1 3 9
1 4 4
1 4 5
1 4 6
1 4 7
1 4 8
1 4 9
1 5 5
1 5 6
1 5 7
1 5 8
1 5 9
1 6 6
1 6 7
1 6 8
1 6 9
1 7 7
1 7 8
1 7 9
1 8 8
1 8 9
1 9 9
2 2 2
2 2 3
2 2 4
2 2 5
2 2 6
2 2 7
2 2 8
2 2 9
2 3 3
2 3 4
2 3 5
2 3 6
2 3 7
2 3 8
2 3 9
2 4 4
2 4 5
2 4 6
2 4 7
2 4 8
2 4 9
2 5 5
2 5 6
2 5 7
2 5 8
2 5 9
2 6 6
2 6 7
2 6 8
2 6 9
2 7 7
2 7 8
2 7 9
2 8 8
2 8 9
2 9 9
3 3 3
3 3 4
3 3 5
3 3 6
3 3 7
3 3 8
3 3 9
3 4 4
3 4 5
3 4 6
3 4 7
3 4 8
3 4 9
3 5 5
3 5 6
3 5 7
3 5 8
3 5 9
3 6 6
3 6 7
3 6 8
3 6 9
3 7 7
3 7 8
3 7 9
3 8 8
3 8 9
3 9 9
4 4 4
4 4 5
4 4 6
4 4 7
4 4 8
4 4 9
4 5 5
4 5 6
4 5 7
4 5 8
4 5 9
4 6 6
4 6 7
4 6 8
4 6 9
4 7 7
4 7 8
4 7 9
4 8 8
4 8 9
4 9 9
5 5 5
5 5 6
5 5 7
5 5 8
5 5 9
5 6 6
5 6 7
5 6 8
5 6 9
5 7 7
5 7 8
5 7 9
5 8 8
5 8 9
5 9 9
6 6 6
6 6 7
6 6 8
6 6 9
6 7 7
6 7 8
6 7 9
6 8 8
6 8 9
6 9 9
7 7 7
7 7 8
7 7 9
7 8 8
7 8 9
7 9 9
8 8 8
8 8 9
8 9 9
9 9 9
費時: 1.4991998672485352



220


list()   字串拆分成串列
>>> list("hello world")
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']


split()   字串拆分成字元
>>> name="my name is Wen"
>>> name.split()
['my', 'name', 'is', 'Wen']


join()   字串加入串列
>>> namelist=['My','name','is','Wen']
>>> ' '.join(namelist)
'My name is Wen'


map()   字串轉成串列
>>> listA=['1','2','3']
>>> list(map(int,listA))
[1, 2, 3]


>>> ipline='1 2 3 4 5'
>>> list01=list(map(int,ipline.split()))
>>> print(list01)
[1, 2, 3, 4, 5]




(28).遞迴算總和
n=100
def sum(n):
    if(n<1):
        return 0
    return sum(n-1)+n

print(sum(n))

5050




(29).函數印費式數列
def fib(n):
    a,b=0,1
    while a<n:
        print(a,end=' ')
        a,b=b,a+b
    print()

fib(1000)

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987




(30).遞迴算階層 factorial
def recu_f(n):
    if n==1:
        return n
    else:
        return n*recu_f(n-1)

num=6
print(num,"階層=",recu_f(num))

6 階層= 720



(31).遞迴算二進位
def dtb(n):
    if n>1:
        dtb(n//2)
    print(n%2,end=' ')

dec=18
dtb(dec)

1 0 0 1 0 



















2019年12月23日 星期一

CH12 程式邏輯發展練習(10-20)


(10).兩個數相加
a=18
b=35
s=a+b
print("a+b=",s)

a+b= 53



(11).算平方根
n=7
print("n ** 0.5 =",n**0.5)

r=n**0.5
print("n**0.5=%0.5f" %r)

import math
print(math.sqrt(9))

n ** 0.5 = 2.6457513110645907
n**0.5=2.64575
3.0


>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

math 用在數學
numpi 用在統計
random
日期


(12).十進制數轉換
dec=168
print("十進制:",dec)
print("二進制:",str(bin(dec)))
print("八進制:",str(oct(dec)))
print("十六進制:",str(hex(dec)))

十進制: 168
二進制: 0b10101000
八進制: 0o250
十六進制: 0xa8



(13).算自然數之和
num=10
sum=0
while (num>0):
    sum += num
    num -= 1
print("總和=",sum)

總和= 55


sum=0
for i in range(1,10+1):
    sum=sum+i
    print('i=',i,'sum=',sum)
print(sum)

i= 1 sum= 1
i= 2 sum= 3
i= 3 sum= 6
i= 4 sum= 10
i= 5 sum= 15
i= 6 sum= 21
i= 7 sum= 28
i= 8 sum= 36
i= 9 sum= 45
i= 10 sum= 55
55



(14).輸入度數的三角函數
import math
def dsin(theta):
    a=math.pi/(180/theta)
    return math.sin(a)

print("Sin(30)=",dsin(30))
print("Sin(45)=",dsin(45))
print("Sin(60)=",dsin(60))

Sin(30)= 0.49999999999999994
Sin(45)= 0.7071067811865475
Sin(60)= 0.8660254037844386


圓周計算方式:
以(度)度量為單位,一圓周為360度 DEG
以(徑)度量為單位,一圓周為2 pi pi=3.14 RAD
PI 圓周率=周長/直徑=180度

大部分程式語言在計算三角函數時,都使用(徑)度量,所以計算三角函數時必須先把(度)度量轉成(徑)度量。如:sin(30),電腦必須寫成  sin(3.1415/6) 才能算出結果


import math
s90=math.sin(3.14/2)        #1
print(s90)

s60=math.sin(3.14/3)        #(3^0.5)2    0.865
print(s60)

s45=math.sin(3.14/4)        #(2^0.5)2    0.7068
print(s45)

s30=math.sin(3.14/6)        #1/2
print(s30)

0.9999996829318346       
0.8657598394923444
0.706825181105366
0.4997701026431024



def pi(a):
    x=2;z=2;a=1;b=3;e=1e-15
    while(z>e):
        z=z*a/b
        x=x+z
        a=a+1
        b=b+2
    return x

p=pi(0)
print(p)

deg=int(input("輸入 sin 角度="))
x=(p*deg)/180
s=x
fc=1
for i in range(1,10):
    fc=fc*(2*i)*(2*i+1)
    s=s+((-1)**i)*(x**(2*i+1))/fc
print("sin(",deg,")=",s)

3.141592653589792
輸入 sin 角度=30
sin( 30 )= 0.49999999999999983

3.141592653589792
輸入 sin 角度=45
sin( 45 )= 0.7071067811865472



(15).簡單計算器
def add(x,y):
    return x+y

def subtract(x,y):
    return x-y

def multiply(x,y):
    return x*y

def divide(x,y):
    return x/y

print("選擇操作:")
print("1.相加")
print("2.相減")
print("3.相乘")
print("4.相除")

choice=input("選擇計算方式(1/2/3/4):")

num1=int(input("輸入第一個數字:"))
num2=int(input("輸入第二個數字:"))

if choice=='1':
    print(num1,'+',num2,'=',add(num1,num2))
 
elif choice=='2':
    print(num1,'-',num2,'=',subtract(num1,num2))

elif choice=='3':
    print(num1,'*',num2,'=',multiply(num1,num2))

elif choice=='4':
    print(num1,'/',num2,'=',divide(num1,num2))

else:
    print("輸入錯誤!")

選擇操作:
1.相加
2.相減
3.相乘
4.相除
選擇計算方式(1/2/3/4):1
輸入第一個數字:23
輸入第二個數字:45
23 + 45 = 68

選擇操作:
1.相加
2.相減
3.相乘
4.相除
選擇計算方式(1/2/3/4):2
輸入第一個數字:23
輸入第二個數字:45
23 - 45 = -22

選擇操作:
1.相加
2.相減
3.相乘
4.相除
選擇計算方式(1/2/3/4):3
輸入第一個數字:23
輸入第二個數字:45
23 * 45 = 1035

選擇操作:
1.相加
2.相減
3.相乘
4.相除
選擇計算方式(1/2/3/4):4
輸入第一個數字:23
輸入第二個數字:45
23 / 45 = 0.5111111111111111




(16).公里轉換英里
k=3.6
c=0.621371
m=k*c
print("%0.3f 公里= %0.3f 英里" %(k,m))

3.600 公里= 2.237 英里




(17).攝氏轉華氏
c=37.2
f=(c*1.8)+32
print("攝氏 %0.1f 度= 華氏 %0.1f" %(c,f))

攝氏 37.2 度= 華氏 99.0




(18).計算三角形面積
a=3;b=6;c=4
s=(a+b+c)/2
area=(s*(s-a)*(s-b)*(s-c))**0.5        #海龍公式
print("面積 = %0.2f" %area)

面積 = 5.33



(19).解一元二次方程式
a=1;b=-2;c=-15
d=(b**2)-(4*a*c)

s1=(-b-(d**0.5))/(2*a)
s2=(-b+(d**0.5))/(2*a)

print("兩個實根分別為:{0} and {1}".format(s1,s2))

兩個實根分別為:-3.0 and 5.0



(20).顯示乘法表
for i in range(1,9+1):
    for j in range(1,9+1):
        print("%2d*%2d=%2d" %(i,j,i*j),end='')
    print()

 1* 1= 1 1* 2= 2 1* 3= 3 1* 4= 4 1* 5= 5 1* 6= 6 1* 7= 7 1* 8= 8 1* 9= 9
 2* 1= 2 2* 2= 4 2* 3= 6 2* 4= 8 2* 5=10 2* 6=12 2* 7=14 2* 8=16 2* 9=18
 3* 1= 3 3* 2= 6 3* 3= 9 3* 4=12 3* 5=15 3* 6=18 3* 7=21 3* 8=24 3* 9=27
 4* 1= 4 4* 2= 8 4* 3=12 4* 4=16 4* 5=20 4* 6=24 4* 7=28 4* 8=32 4* 9=36
 5* 1= 5 5* 2=10 5* 3=15 5* 4=20 5* 5=25 5* 6=30 5* 7=35 5* 8=40 5* 9=45
 6* 1= 6 6* 2=12 6* 3=18 6* 4=24 6* 5=30 6* 6=36 6* 7=42 6* 8=48 6* 9=54
 7* 1= 7 7* 2=14 7* 3=21 7* 4=28 7* 5=35 7* 6=42 7* 7=49 7* 8=56 7* 9=63
 8* 1= 8 8* 2=16 8* 3=24 8* 4=32 8* 5=40 8* 6=48 8* 7=56 8* 8=64 8* 9=72
 9* 1= 9 9* 2=18 9* 3=27 9* 4=36 9* 5=45 9* 6=54 9* 7=63 9* 8=72 9* 9=81










2019年12月22日 星期日

CH12 程式邏輯發展練習(1-9) 重複

題型歸納
-----------------------------

語言熟悉題型:

1.印出Hello
>>> print("Hello, Python")
Hello, Python


2. 交換2個變數
x=5;y=10
print("x 交換前:{}".format(x))
print("y 交換前:{}".format(y))
print()

temp=x;x=y;y=temp        #Pyhton x,y=y,x
print("x 交換後:{}".format(x))
print("y 交換後:{}".format(y))
x 交換前:5
y 交換前:10

x 交換後:10
y 交換後:5


3.判斷正負
num=float(input("輸入一個數:"))
if num>0:
    print(num,"是正數")
elif num==0:
    print("0")
else:
    print(num,"是負數")

print(type(num))

輸入一個數:-3.5
-3.5 是負數
<class 'float'>


4.判斷奇偶數
n=int(input("輸入一個數:"))
if (n%2)==0:
    print("{0}是偶數".format(n))
else:
    print("{0}是奇數".format(n))

輸入一個數:13
13是奇數


5.三個數中找最大數
n1=23;n2=8;n3=41
if(n1>=n2) and (n1>=n3):
    lar=n1
elif(n2>=n1) and (n2>=n3):
    lar=n2
else:
    lar=n3

print(n1,n2,n3, "三數中最大是",lar)

23 8 41 三數中最大是 41


6.判斷是否閏年
年份除以4不可整除,為平年
年份除以4可整除,且除以100不可整除,為閏年
年份除以100可整除,且除以400不可整除,為平年
年份除以400可整除,為閏年
即逢4年閏,逢100不閏,逢400又閏

yr=int(input("輸入年份:"))
if (yr % 4) == 0:
    if (yr % 100) == 0:
        if (yr % 400) == 0:
            print(yr,"是閏年")
        else:
            print(yr,"不是閏年")
    else:
        print(yr,"是閏年")
else:
    print(yr,"不是閏年")

輸入年份:1999
1999 不是閏年

輸入年份:2000
2000 是閏年

輸入年份:2100
2100 不是閏年


7.檢查是否為質數
num=40
if num>1:
    for i in range(2,num):
        if(num%i)==0:
            print(num,"不是質數")
            print(i,"*",num//i,"是",num)
            break
    else:
       print(num,"是質數")
else:
    print(num,"不是質數")

40 不是質數
2 * 20 是 40


num=41
if num>1:
    for i in range(2,num):
        if(num%i)==0:
            print(num,"不是質數")
            print(i,"*",num//i,"是",num)
            break
    else:
       print(num,"是質數")
else:
    print(num,"不是質數")

41 是質數


(8)檢查阿姆斯壯數
sum=0;num=407;temp=num
while temp > 0:
    digit = temp % 10
    sum += digit ** 3
    temp=temp // 10

if num == sum:
    print(num,"是阿姆斯壯數")
else:
    print(num,"不是阿姆斯壯數")

407 是阿姆斯壯數


#用字串處理
n=407;s=0
for i in range(3):
    s=s+int(str(n)[i:i+1])**3
if s==n: print(n,"是阿姆斯壯數")

407 是阿姆斯壯數









基本題型

入門題型

進階題型

特殊題型

2019年12月8日 星期日

CH12 程式邏輯發展練習(1-9)



-----------------------12.1 語言熟悉題型

(1)
>>> print("Hello,Python !")
Hello,Python !


(2)交換2個變數
x=5;y=10
print(' x 交換前:{}'.format(x))
print(' y 交換前:{}'.format(y))
print()

temp=x;x=y;y=temp
print(' x 交換後:{}'.format(x))
print(' y 交換後:{}'.format(y))


x=5;y=10
print(' x 交換前:{}'.format(x))
print(' y 交換前:{}'.format(y))
print()

x,y=y,x                #Python 特殊交換法
print(' x 交換後:{}'.format(x))
print(' y 交換後:{}'.format(y))


(3)判斷正負數
num=float(input("輸入一個數:"))
if num >0:
    print(num,"是正數")
elif num==0:
    print("零")
else:
    print(num,"是負數")

輸入一個數:-5
-5.0 是負數


(4)判斷奇偶數
num=int(input("輸入一個數:"))
if (num % 2)==0:
    print("{0} 是偶數".format(num))        #參照 .format 的元素是用集合的大掛號{}
else:
    print("{0} 是奇數".format(num))

輸入一個數:13
13 是奇數



(5)3數中找出最大的數
n1=23;n2=8;n3=41

if(n1>=n2) and (n1>=n3):
    lar=n1
elif(n2>=n1) and (n2>=n3):
    lar=n2
else:
    lar=n3

print("最大數",lar)

最大數 41


(6)判斷是否閏年
閏年規則:
年份除以4,不可以整除 ---> 平年
年份除以4可以整除,且除以100不可整除 ---> 閏年
年份除以100可以整除,且除以400不可整除 ---> 平年
年份除以400,可以整除 ---> 潤年

year=int(input("輸入年份:"))
if (year%4)==0:
    if (year%100)==0:
        if (year%400)==0:
            print(year,"是閏年")
        else:
            print(year,"不是閏年")
    else:
        print(year,"是閏年")
else:
    print(year,"不是閏年")

輸入年份:2019
2019 不是閏年


(7)檢查是否為質數
質數:除了1和本身不能被其它數整除

num=41
if num>1:
    for i in range(2,num):
        if (num % i)==0:
            print(num,"不是質數")
            print(i,'X',num//i,"是",num)
            break
    else:
        print(num,"是質數")
else:
    print(num,"不是質數")

41 是質數


(8)檢查阿姆斯壯數
阿姆斯壯數:在n位的整數中,若加總每個數字的n次方後等於該整數,該整數即稱Armstrong number。如153 ---> 1^3+5^3+3^3=153 。自然數中阿姆斯壯數有88個,最大為39位數。三位數共有4個:153,370,371,407。

sm=0;num=153;tmp=num

while tmp>0:
    digit=tmp % 10
    sm += digit **3
    tmp=tmp//10

if num==sm:
    print(num,"是阿姆斯壯數")
else:
    print(num,"不是阿姆斯壯數")

153 是阿姆斯壯數


-------使用字串處理依序取字元
sm=0;num=153;tmp=num

for i in range(3):
    sm=sm+int(str(num)[i:i+1])**3

if sm==num: print(num,"是阿姆斯壯數")

153 是阿姆斯壯數

-------依餘數順序取數值位元
sm=0;num=371;d=0

for i in range(1,4):
    d=(num%(10**i)-num%(10**(i-1)))//(10**(i-1))
    sm=sm+d**3

if sm==num: print(num,"是阿姆斯壯數")

371 是阿姆斯壯數


------依商數順序取數值位元
sm=0;num=407;m=0

for i in range(0,3):
    m=(num//(10**i))-(((num//(10**i))//10)*10)
    sm=sm+m**3

if sm==num: print(num,"是阿姆斯壯數")

407 是阿姆斯壯數


(9)字元的ASCII值
char='A'
print(char+" 的ASCII值=",ord(char))

n=97
print("ASCII",n,"的字元=",chr(n))

A 的ASCII值= 65
ASCII 97 的字元= a







2019年12月4日 星期三

CH11 列印文字圖形程式練習

----------------- 11.2 題解程式
(1).
for i in range(5+1):
    for j in range(i+1):
        print('*',end='')
    print()

*
**
***
****
*****
******



for i in range(5+1):
    print("i=",i,end=' ')
    for j in range(i+1):
        print("j=",j,'*',end=' ')
    print()

i= 0 j= 0 * 
i= 1 j= 0 * j= 1 * 
i= 2 j= 0 * j= 1 * j= 2 * 
i= 3 j= 0 * j= 1 * j= 2 * j= 3 * 
i= 4 j= 0 * j= 1 * j= 2 * j= 3 * j= 4 * 
i= 5 j= 0 * j= 1 * j= 2 * j= 3 * j= 4 * j= 5 * 



(2).
for i in range(-4,4+1):
    print(abs(i)*' ',end='')                #abs(i)*' ' 有空格
    for j in range(1,5-abs(i)+1):
        print(' *',end='')
    print()

     *
    * *
   * * *
  * * * *
 * * * * *
  * * * *
   * * *
    * *
     *


for i in range(-4,4+1):
    print(abs(i)*'',end='')                #abs(i)*'' 沒有空格
    for j in range(1,5-abs(i)+1):
        print(' *',end='')
    print()

 *
 * *
 * * *
 * * * *
 * * * * *
 * * * *
 * * *
 * *
 *


(3).
for i in range(1,5+1):    
    for j in range(1,i+1):        
        print(i,end='')
    print()

1
22
333
4444
55555


(4).
for i in range(-4,4+1):   
    for j in range(-4,4+1):
        if(abs(i)>abs(j)):
            print(abs(i)+1,end='')
        else:
            print(abs(j)+1,end='')
    print()

555555555
544444445
543333345
543222345
543212345
543222345
543333345
544444445
555555555



(5).
for i in range(5):   
    for j in range(i+1):       
        print(chr(65+i),end='')
    print()

A
BB
CCC
DDDD
EEEEE


(6).
for i in range(0,5):         
    print('*')
print()

*
*
*
*
*

for i in range(0,5):         
    print('*',end='')
print()

*****

for i in range(1,5+1):
    print(i)
print()

1
2
3
4
5


for i in range(1,5+1):
    print(i,end='')
print()

12345


for i in range(0,5):
    print(chr(65+i))
print()

A
B
C
D
E


for i in range(0,5):
    print(chr(65+i),end='')
print()

ABCDE


(7).
for i in range(1,4+1):
    for j in range(1,3+1):
        for k in range(i):
            print(j*'*'+(3-j)*' ',end='')
        print()


**
***
*  * 
** **
******
*  *  * 
** ** **
*********
*  *  *  * 
** ** ** **
************


(8).
for i in range(1,8):
    print((8-i)*' '+'*'+(((i-1)*2)-1)*' '+(i>1)*'*')
print((i+1)*'* ')

       *
      * *
     *   *
    *     *
   *       *
  *         *
 *           *
* * * * * * * *


(9-0).
for i in range(-4,4+1):
    for j in range(-4,4+1):
        if (abs(i)>abs(j)-1):
            print('*',end='')
        else:
            print(' ',end='')
    print()

*********
 *******
  ***** 
   *** 
    *   
   *** 
  ***** 
 *******
*********


(9-1).
for i in range(-4,4+1):
    for j in range(-4,4+1):
        if (abs(i)<abs(j)+1):
            print('*',end='')
        else:
            print(' ',end='' )
    print()

*       *
**     **
***   ***
**** ****
*********
**** ****
***   ***
**     **
*       *


(9-2).
for i in range(-4,4+1):
    for j in range(-4,4+1):
        if ((abs(i)+abs(j))<4):
            print(' ',end='')
        else:
            print('*',end='' )
    print()

*********
**** ****
***   ***
**     **
*       *
**     **
***   ***
**** ****
*********



(10).
for i in range(1,9+1):
    for j in range(-9,9+1):
        if (j==0) or (i>9-abs(j)):           
            print(' ',end='')
        else:
            print('*',end='')
    print()

 ******** ********
  ******* ******* 
   ****** ****** 
    ***** *****   
     **** ****   
      *** ***     
       ** **     
        * *     


(11).
for i in range(1,5+1):
    for j in range(1,2+1):
        print((5-i)*' ',end='')
        for k in range(1,i+1):
            print('* ',end='')
        print((5-i)*' ',end='')
    print()
    print()

    *         *   

   * *       * *   

  * * *     * * * 

 * * * *   * * * * 

* * * * * * * * * *


(12).
for i in range(1,5+1):
    for j in range(6-i,0,-1):
        print(chr(i+64),end='')
    print()

AAAAA
BBBB
CCC
DD
E


(13).
x=0
for i in range(1,5+1):
    for j in range(i):
        x=1-x
        print(x,end='')
    print()

1
01
010
1010
10101


(14).
for i in range(5):
    for j in range(5):
        if (i==j):
            print(0,end='')
        else:
            print(i+1,end='')
    print()

01111
20222
33033
44404
55550


(15).
for i in range(1,5+1):
    for j in range(-4,4+1):
        if (i >= abs(j)+1):
            print(i-abs(j),end='')
        else:
            print(' ',end='')
    print()

    1   
   121 
  12321 
 1234321
123454321


(16).
for i in range(1,5+1):
    for j in range(1,5+1):
        if (i +j>=6):
            print(6-i,end='')
        else:
            print(' ',end='')
    print()

     5
   44
  333
 2222
11111 


(17).
x=1
for i in range(1,5+1):
    for j in range(1,i+1):
        print('%3d' %(x),end='')
        x=x+1
    print()

  1
  2  3
  4  5  6
  7  8  9 10
 11 12 13 14 15


(18).
for i in range(1,6+1):
    for j in range(-5,5+1):
        if(i<abs(j)+2):
            print(chr(65+(5-abs(j))),end='')
        else:
            print(' ',end='')
       
    print()

ABCDEFEDCBA
ABCDE EDCBA
ABCD   DCBA
ABC     CBA
AB       BA
A         A


(19).
str="SCHOOL"
for i in range(6):
    print(str[0:i+1])
print('\n')

S
SC
SCH
SCHO
SCHOO
SCHOOL


(20).
for i in range(-4,4+1):
    for j in range(-4,4+1):
        if (abs(i)==abs(j)):
            print(chr(97+abs(i)),end='')
        else:
            print(' ',end='' )
    print()

e       e
 d     d
  c   c 
   b b 
    a   
   b b 
  c   c 
 d     d
e       e






















2019年11月27日 星期三

CH10 陣列 ( 數據類型資料 )


--------------------------------- 數據類型資料

Python 將一般的陣列變數轉換為容器,容器中有:
串列 List
元組 Tuple
字典 Dictionary
集合 Set


------------ 10.1 串列 List ------------

>>> list1=[2,4,6,8,10]
>>> print(list1)
[2, 4, 6, 8, 10]


>>> for i in range(5):
print(list1[i],end=' ')

2 4 6 8 10


>>> x=range(5)
>>> type(x)
<class 'range'>
# range 其實也是一個串列 range(start, end, step)

>>> for i in list1:
print(i,end=' ')

2 4 6 8 10



>>> C=[3,4]
>>> D=[5,6]
>>> E=C+D
>>> print(E)
[3, 4, 5, 6]
>>> E=E+E
>>> print(E)
[3, 4, 5, 6, 3, 4, 5, 6]
>>> E=2*C
>>> print(E)
[3, 4, 3, 4]

>>> e=21
>>> print(e)        #變數名稱大小寫 是不同
21
>>> print(E)
[3, 4, 3, 4]




>>> list01=[]
>>> for i in range(1,10+1):
list01.append(i)


>>> print(list01)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


----- 10.1.1 串列宣告

串列元素類別可以是整數、字串、布林值...
 list01=[2,4,6,8,10]
 list02=["星期日","星期一","星期二"]
 list03=[True, 1, 3.14, "abc"]


----- 10.1.2 空串列

還不知串列元素有多少個
list01=[ ]



----- 10.1.3 一維串列

 >>> colors=['red','blue','green','yellow']
>>> for i in colors:
print(i, end=' ')

red blue green yellow


>>> list02=['a','b','c','d','e','f']
>>> for i in range(6):
print(list02[i],end=' ')

a b c d e f


>>> nums=[1,2,3,4,5,6]
>>> for i in nums:
print(i,end=' ')

1 2 3 4 5 6





----- 10.1.4 二維串列

>>> list06=[('Jan',1),('Feb',2),('Mar',3),('Apr',4),('May',5),('Jun',6)]
>>> print(list06[0][0],list06[0][1],list06[3][0],list06[3][1])
Jan 1 Apr 4

012345
0JanFebMarAprMayJun
1123456


>>> for i in range(2):
for j in range(6):
print(list06[j][i],end=' ')
print()

Jan Feb Mar Apr May Jun
1 2 3 4 5 6



二維串列:產生、設定、呼叫

>>> p=[['']*5 for i in range(10)]
>>> for i in range(10):
for j in range(5):
p[i][j]=str(i)+','+str(j)

>>> for i in range(10):
for j in range(5):
print(p[i][j],end=' ')
print()

0,0 0,1 0,2 0,3 0,4
1,0 1,1 1,2 1,3 1,4
2,0 2,1 2,2 2,3 2,4
3,0 3,1 3,2 3,3 3,4
4,0 4,1 4,2 4,3 4,4
5,0 5,1 5,2 5,3 5,4
6,0 6,1 6,2 6,3 6,4
7,0 7,1 7,2 7,3 7,4
8,0 8,1 8,2 8,3 8,4
9,0 9,1 9,2 9,3 9,4






----- 10.1.5 串列搜尋 index()

>>> IList=[123,'xyz','456','abc']
>>> print("index for xyz :",IList.index('xyz'))
index for xyz : 1
>>> print("index for zara :",IList.index('456'))
index for zara : 2



----- 10.1.6 串列計算 count()

>>> list01=[123,'xyz','456','abc',123]
>>> print("count for 123 :",list01.count(123))
count for 123 : 2
>>> print("count for 456 :",list01.count('456'))
count for 456 : 1



----- 10.1.7 串列新增元素 append()

>>> list02=[123,'xyz','456','abc']
>>> list02.append(2019);
>>> print("list02=",list02)
list02= [123, 'xyz', '456', 'abc', 2019]




----- 10.1.8 串列插入元素 insert()

>>> list03=[123,'xyz','456','abc']
>>> list03.insert(3,2019)
>>> print("list03:",list03)
list03: [123, 'xyz', '456', 2019, 'abc']




----- 10.1.9 串列移除元素 remove()

>>> list04= [123, 'xyz', '456', 'abc', 'xyz']
>>> list04.remove('xyz')
>>> print("list04:",list04)

list04: [123, '456', 'abc', 'xyz']                #移除列表中第一個匹配項

>>> list04.remove('abc')
>>> print("list04:",list04)
list04: [123, '456', 'xyz']




----- 10.1.10 串列排序

>>> List=["星期0","星期2","星期1","星期3","星期4"]
>>> List.sort()
>>> print("List:",List)
List: ['星期0', '星期1', '星期2', '星期3', '星期4']



----- 10.1.11 串列反轉排序

>>> List=["星期0","星期2","星期1","星期3","星期4"]
>>> List.sort(reverse=True)                #reverse=True 降冪   reverse=False 升冪 (內定)
>>> print("List:",List)

List: ['星期4', '星期3', '星期2', '星期1', '星期0']




----- 10.1.12 串列綜合表達法 comprehension

>>> list00=[0,1,2,3,4,5,6,7,8,9]
>>> print(list00)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> list01=[str(x) for x in list00]
>>> print(list01)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

>>> print(" ".join(list01))
0 1 2 3 4 5 6 7 8 9                #最後沒有空白

>>> for i in list01:
print(i,end=' ')

0 1 2 3 4 5 6 7 8 9                 #最後有一個空白




----- 10.1.13 字串串列轉數值串列

>>> listA=['1','2','3']
>>> listB=list(map(int,listA))
>>> print(listB)

[1, 2, 3]



>>> list03='1 10 100 1000 10000 10000'
>>> print(list03)
1 10 100 1000 10000 10000
>>> list04=list(map(int,list03.split()))
>>> print(list04)
[1, 10, 100, 1000, 10000, 10000]



重點:

  • 文字字串   轉成   數值串列
  • 數值串列   轉成   文字字串


  • 文字字串   轉成   文字串列
  • 文字串列   轉成   文字字串


  • 字串前後空白去除




>>> list01=[1,2,3,4]
>>> list02=[3,4,5,6]
>>> len(list01)
4

>>> listA=list(map(int,['1','2','3','4']))        #字元轉成整數
>>> print(listA)
[1, 2, 3, 4]

>>> max(list01)
4
>>> max(list02)
6

>>> min(list01)
1
>>> min(list02)
3

>>> tupe=(6,7,8)                #元素轉成串列 Tuple 轉 List
>>> list(tupe)
[6, 7, 8]



>>> list03=[6,5,4,3,2,1]
>>> listA=list03[1:3]                #取出 n1~n2-1 的元素
>>> print(listA)
[5, 4]

>>> listB=list03[0:5:2]                #取出 n1~n2-1 的元素,間隔n3
>>> print(listB)
[6, 4, 2]


>>> del list03[1:3]
>>> print(list03)
[6, 3, 2, 1]

>>> list03.append(7)
>>> print(list03)
[6, 3, 2, 1, 7]

>>> n=list03.count(7)        #某元素在列表中出現的次數
>>> print(n)
1
>>> m=len(list03)
>>> print(m)
5


>>> list03.insert(1,7)
>>> print(list03)
[6, 7, 3, 2, 1, 7]





>>> s1='375'
>>> list06=list(s1)        #字串轉列表
>>> print(list06)
['3', '7', '5']



>>> print(list03)
[6, 7, 3, 2, 1, 7]

>>> n=list03.pop()        #預設移除最後一個元素
>>> print(n)
7

>>> print(list03)
[6, 7, 3, 2, 1]


>>> print(list03)
[6, 7, 3, 2, 1]
>>> list03.remove(3)        #移除列表中某個值得第一個匹配項
>>> print(list03)
[6, 7, 2, 1]


>>> print(list03)
[6, 7, 2, 1]
>>> list03.reverse()
>>> print(list03)
[1, 2, 7, 6]


>>> list03=[7,2,1,6]
>>> list03.sort()
>>> print(list03)
[1, 2, 6, 7]








------------ 10.2  ------------




------------ 10.3  ------------



------------ 10.4  ------------





















2019年11月25日 星期一

CH9 初學5題

---------------------- 9-1 九九乘法表

for i in range(1,10):                #印直行
    for j in range(1,10):            #印橫行
        print("%3d" %(i*j),end=' ')
    print()


  1   2   3   4   5   6   7   8   9
  2   4   6   8  10  12  14  16  18
  3   6   9  12  15  18  21  24  27
  4   8  12  16  20  24  28  32  36
  5  10  15  20  25  30  35  40  45
  6  12  18  24  30  36  42  48  54
  7  14  21  28  35  42  49  56  63
  8  16  24  32  40  48  56  64  72
  9  18  27  36  45  54  63  72  81









---------------------- 9-2 費氏數列

a,b=0,1
print(a,b,end=' ')
n=1000

while a+b<n:
    c=a+b
    print(c,end=' ')
    a=b
    b=c
print()


0 1 1  2  3  5  8  13  21  34  55  89  144  233  377  610  987  







---------------------- 9-3 猜數字遊戲

import random
c=0;guess=0;play='y'
n=random.randint(1,100)
while (guess != n) and ((play != 'y') or (play != 'Y')):
    guess=int(input("請輸入 (1~100) ?"))
    c=c+1
    if (guess >n):
        print("too big")
    elif(guess<n):
        print("too small")
    else:
        play=input("你猜對了,要繼續ㄇ(Y/N)?")
        if (play=='n') or (play == 'N'):
            break
        n=random.randint(1,100)
        c=0
    print("你已經猜了:",c,"次")
print(" 答案是:",n)












---------------------- 9-4 最大公因數 GCD


x=12;y=18
if(x>y):
    x,y=y,x
m=x;x=y
while(m>0):
    y=x;x=m;m=y%x
print(x)


6




---------------------- 9-5 數制轉換  十進制 轉 二進、八進、 十六進


def numsys(dec,ns):
    n=dec
    x=''
    hstr="0123456789ABCDEF"
    if (n==0):
        x='0'
    while(n>0):
        x=hstr[(n%ns):(n%ns)+1]+x
        n= n//ns
    return x
dec=18
print("十進制:",dec,":")
print("二進制=",numsys(dec,2))
print("八進制=",numsys(dec,8))
print("十六進制=",numsys(dec,16))


十進制: 18 :
二進制= 10010
八進制= 22
十六進制= 12


*********2024/03/28

def NumSys(dec,NS):
    
    RtnS=""
    AllStr="0123456789ABCDEF"
    if dec==0:RtnS="0"
    while dec>0:
        RtnS=AllStr[dec%NS:(dec%NS)+1]+RtnS
        dec=dec//NS
    return RtnS


N=int(input("請輸入任一大於0正整數:"))
print(str(N)+ " 的 二  進制=",NumSys(N,2))
print(str(N)+ " 的 八  進制=",NumSys(N,8))
print(str(N)+ " 的 十六進制=",NumSys(N,16))

請輸入任一大於0正整數:18
18 的 二  進制= 10010
18 的 八  進制= 22
18 的 十六進制= 12



2019年11月20日 星期三

CH8 函數

----------------------- 區域變數Local Variable 和 全域變數Global Variable

global_list=[1,2,3,4,]

def runvar(local_list=global_list):        #同一個位置,所以local_list 跟global_list 同
    print(local_list)
    local_list.append(5)

runvar()
print(global_list)


[1, 2, 3, 4]
[1, 2, 3, 4, 5]




x=10           #全域變數
y=20           #全域變數
lista=[]        #全域變數

def showvar():
    global y,lista
    listb=[5,4,3,2,1]        #區域變數
    lista=listb
    y=10
 
    lista.append(6)
    print('showvar=',lista)


def localvar():
    y=30                #區域變數
    z=40                #區域變數
    print('x=',x)
    print("localvar 區域 y=",y)
    print("localvar 全域 lista=",lista,'\n')


print("main x=",x)                #全域變數
showvar()
localvar()
print("main y=",y)
print("main lista=",lista)


main x= 10
showvar= [5, 4, 3, 2, 1, 6]
x= 10
localvar 區域 y= 30
localvar 全域 lista= [5, 4, 3, 2, 1, 6]

main y= 10
main lista= [5, 4, 3, 2, 1, 6]








----------------------- 8.4 程序
函數 function:
y=f(x) y 會隨 x 改變而改變
f(x):函數
x:引數 argument 會被帶到函數中運算,把結果放到函數名字中帶回

程序 procedure:
可以沒有引數,在程式中做運算,由於這運算在程式中執行多次,所以把它定義成程序,有需要再呼叫使用




>>> dir(time)
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']


>>> help(time.perf_counter)
Help on built-in function perf_counter in module time:
perf_counter(...)
    perf_counter() -> float 
    Performance counter for benchmarking.

>>> help(time.time)
Help on built-in function time in module time:
time(...)
    time() -> floating point number 
    Return the current time in seconds since the Epoch.
    Fractions of a second may be present if the system clock provides them.





import time
def procedure():
    time.sleep(2.5)

t0=time.perf_counter()
print("計時開始:")
procedure()
print(time.perf_counter()-t0)

t1=time.time()
procedure()
print(time.time()-t1)


計時開始:
2.503089078        #因 print("計時開始:") ,所以比下面多0.00308...秒
2.5



def procedure():
    print("這是程序")
    a=10+20
    print(a)

procedure()


這是程序
30












----------------------- 常用外部套件

sys 模組
math 模組
random 模組
array 模組
time 模組
numpy 模組




>>> import math
>>> math.pi
3.141592653589793


>>> dir(math)        #有那些涵數
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']


>>> help(math.pow)
Help on built-in function pow in module math:

pow(x, y, /)
    Return x**y (x to the power of y).

>>> 4**2
16
>>> math.pow(4,2)
16.0



>>> 4^2        #位元運算  XOR 互斥或
6
>>> 5^4
1


>>> math.sqrt(16)
4.0
>>> math.floor(3.14)
3
>>> abs(-2)
2
>>> math.fabs(-2)
2.0

>>> math.fmod(5,3)
2.0
>>> 5%3
2








>>> import random
>>> random.seed(10)        #改變隨機數產生器的種子
>>> random.randint(1,100)        #隨機產生1~100間整數
74


>>> random.randrange(10,50)        #10~50 挑選出一個亂數
37

>>> random.uniform(1,10)        #1~10 產生一個實數亂數
5.3430550709577025


>>> random.random()        #0~1 產生一個實數亂數
0.014832446024553692



>>> random.choice('abcdefg!@#$%')        #隨機字元
'!'


>>> a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
>>> random.sample(a,5)        #從 list a 中取出5個不重複的數
[14, 8, 5, 11, 3]








>>> import time
>>> localtime=time.localtime(time.time())
>>> print('本地時間:',localtime)
本地時間: time.struct_time(tm_year=2019, tm_mon=11, tm_mday=21, tm_hour=9, tm_min=8, tm_sec=10, tm_wday=3, tm_yday=325, tm_isdst=0)

>>> print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
2019-11-21 10:09:14

>>> print(time.strftime("%a %b %d %H:%M:%S:%Y",time.localtime()))
Thu Nov 21 10:10:29:2019


#格式字串符轉換為時間戳
>>> a='Thu Nov 21 10:10:29:2019'
>>> print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S:%Y")))
1574302229.0





>>> from datetime import date        #datetime 套件  date 模組
>>> today=date.today()                   #date 物件  today() 函數
>>> today
datetime.date(2019, 11, 21)


>>> my_birthday=date(2000,1,1)
>>> my_birthday
datetime.date(2000, 1, 1)
>>> days=abs(my_birthday-today)
>>> print(days)
7264 days, 0:00:00




>>> from datetime import datetime,date,time        #從datetime 物件 呼叫 其中3個模組
>>> d=date(2000,1,1)        #函數
>>> t=time(12,30)
>>> datetime.combine(d,t)
datetime.datetime(2000, 1, 1, 12, 30)


>>> datetime.now()
datetime.datetime(2019, 11, 21, 9, 26, 54, 426221)



#算天數
>>> from datetime import datetime
>>> date_format='%m/%d/%Y'
>>> a=datetime.strptime('1/1/2000',date_format)
>>> b=datetime.strptime('3/1/2019',date_format)
>>> delta=b-a
>>> print(delta.days)
6999



>>> dt=datetime.strptime('24/11/18 12:30','%d/%m/%y %H:%M')
>>> dt
datetime.datetime(2018, 11, 24, 12, 30)

>>> tt=dt.timetuple()
>>> for i in tt:
print(i)


2018        #年
11        #月
24        #天
12        #時
30        #分
0        #秒
5        #周 (0=Monday)
328        #自1月1日以來的天數
-1        #dst -method tzinfo.dst() returned None






>>> import calendar
>>> cal=calendar.month(2019,1)        #輸出2019年 1月份的日曆
>>> print(cal)
    January 2019
Mo Tu We Th Fr Sa Su
    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



>>> import datetime
>>> i=datetime.datetime.now()
>>> print("當前的日期和時間是 %s" %i)
當前的日期和時間是 2019-11-21 10:20:33.948829

>>> print("ISO 格式的日期和時間 %s" %i.isoformat())
ISO 格式的日期和時間 2019-11-21T10:20:33.948829

>>> print("當前的年份是 %s" %i.year)
當前的年份是 2019
>>> print("當前的月份是 %s" %i.month)
當前的月份是 11
>>> print("當前的日期是 %s" %i.day)
當前的日期是 21

>>> print("當前小時是 %s" %i.hour)
當前小時是 10
>>> print("當前分鐘是 %s" %i.minute)
當前分鐘是 20
>>> print("當前秒是 %s" %i.second)
當前秒是 33

>>> print("dd/mm/yyyy 格式是 %s/%s/%s" %(i.day,i.month,i.year))
dd/mm/yyyy 格式是 21/11/2019
















----------------------- 自訂函數


def sum(n):
    s=0
    for i in range(s,n+1):
        s=s+i
    return s

print(sum(100))

5050


#費氏數列
def fib(n):
    a,b=0,1
    while a<n:
        print(a,end='  ')
        a,b=b,a+b
    print()
 
fib(1000)

0  1  1  2  3  5  8  13  21  34  55  89  144  233  377  610  987






----------------------- 字串函數
>>> chr(65)
'A'
>>> ord('A')
65

>>> a=123
>>> b='456'
>>> a+int(b)
579
>>> str(a)+b
'123456'

>>> len('guochin')
7

>>> 'guo'.center(10)        #傳回指定長度的字串,字串置中
'   guo    '

>>> 'guo'.find('g')        #字元第1次出現的索引
0
>>> 'guo'.find('u')
1

>>> 'Python is easy'.endswith('easy')       #判斷是否以指定的字串結束
True


>>> 'chinku'.upper()
'CHINKU'
>>> 'CHINKU'.lower()
'chinku'


>>> repr(65)        #輸出的字符加上引號
'65'
>>> repr('ku')
"'ku'"
>>> repr("ku")
"'ku'"


>>> str='abcdef'        #擷取
>>> str[2:5]
'cde'


>>> 'good'.replace('o','e')        #取替
'geed'


>>> 'good dog'.count('o')
3


>>> '12'.ljust(5,'0')        #對齊,餘補上指定字元
'12000'
>>> '12'.rjust(5,'0')
'00012'


>>> ' abc '.strip()        #去除前後空白
'abc'


>>> 'qqqabchhh'.rstrip('h')        #刪除左、右指定字元
'qqqabc'
>>> 'qqqabchhh'.lstrip('q')
'abchhh'



>>> 'my name is chinku'.split()        #將字符串拆分為列表
['my', 'name', 'is', 'chinku']

>>> "my,name,is,chinku".split(',')
['my', 'name', 'is', 'chinku']




>>> help(round)
Help on built-in function round in module builtins:

round(number, ndigits=None)
    Round a number to a given precision in decimal digits.
    
    The return value is an integer if ndigits is omitted or None.  Otherwise
    the return value has the same type as the number.  ndigits may be negative.








>>> for i in range(0,5):
print(i)
0
1
2
3
4

>>> a='12345'
>>> print(a[1:3])
23
>>> b=a[0:2]+'A'+a[3:5]
>>> b
'12A45'









----------------------- 常用數值函數

>>> abs(-5)
5

>>> bool(0)          #非 0 即真
False
>>> bool(-3)
True

>>> divmod(8,4)      #除,傳回 商 與 餘數
(2, 0)

>>> float(6)
6.0

>>> import math
>>> math.floor(3.14159)        #傳回小於原數的整數 (去除小數點)
3

>>> hex(10)
'0xa'
>>> hex(16)
'0x10'

>>> oct(7)
'0o7'
>>> oct(8)
'0o10'


>>> int(4.7)
4
>>> max(45,23,76)
76
>>> min(45,23,76)
23

>>> pow(2,3)        # 2 的 3 次方
8



>>> round(8.4)
8
>>> round(8.5)
8
>>> round(8.6)
9
>>> round(8.9)        #傳回最接近原數的整數
9


>>> sorted([2,8,5,3,1])        #list 小到大排序
[1, 2, 3, 5, 8]

>>> sorted([2,8,5,3,1],reverse=True)         #list 大到小排序
[8, 5, 3, 2, 1]


>>> sum([2,8,5,3,1])
19

>>> type(3.5)
<class 'float'>











2019年11月18日 星期一

CH7 指令



-------------------------- while 迴圈

sum=0
i=1
while i<=100:
    sum +=i
    i+=1
print('1+2..+100=',sum)

1+2..+100= 5050


cnt=0
guess=0
ans=38
while (guess != ans):
    guess=int(input('請輸入(1~100) ?'))
    cnt += 1
    print('你已經猜:',cnt,'次')





for n in range(2,10):
    for i in range(2,n):
        if n % i ==0:
            print(n,'=',i,'*',n//i)
            break
    else:
        print(n,'是質數')


2 是質數
3 是質數
4 = 2 * 2
5 是質數
6 = 2 * 3
7 是質數
8 = 2 * 4
9 = 3 * 3




for n in range(2,10):
    if n % 2 == 0:
        print(n,' 是偶數')
        continue
    print(n,' ..奇數')


2  是偶數
3  ..奇數
4  是偶數
5  ..奇數
6  是偶數
7  ..奇數
8  是偶數
9  ..奇數









-------------------------- for 迴圈


Python 中 for 以及 while 可以像 if 一樣有個 else 區塊,當迴圈沒有中斷就會執行到 else 區塊。
換句話說,就是 esle 為 for loop 的其中一個部份,如果 break 就一併跳出,沒有的話就會執行到。


#小於10的質數
for n in range(2,10):
    print('n=',n)
    for i in range(2,n):
        print('i=',i,end=' ')
        if n % i ==0:
            break
    else:
        print( '>> %d'  %n,end=' ' )
    print('\n')

n= 2
>> 2

n= 3
i= 2 >> 3

n= 4
i= 2

n= 5
i= 2 i= 3 i= 4 >> 5

n= 6
i= 2

n= 7
i= 2 i= 3 i= 4 i= 5 i= 6 >> 7

n= 8
i= 2

n= 9
i= 2 i= 3




nums=[60,70,30,110,90]
isFound=False
for n in nums:
    if n>100:
        isFound=True
        print("有大於100的數")
        break

if not isFound:
    print("沒有大於100的數")


有大於100的數




nums=[60,70,30,110,90]

for n in nums:
    if n>100:
     
        print("有大於100的數")
        break
else:
    print("沒有大於100的數")


有大於100的數












Python 中 break、continue、pass 的區別:
break:強制跳出 ❮整個❯ 迴圈
continue:強制跳出 ❮本次❯ 迴圈,繼續進入下一圈
pass:不做任何事情,所有的程式都將繼續


cnt=0
for char in 'content':
    cnt+=1
    if char == 't':
        break
    print(char)
print('\n迴圈結束')
print('迴圈執行 %d 次' %cnt)

c
o
n

迴圈結束
迴圈執行 4 次



cnt=0
for char in 'content':
    cnt+=1
    if char == 't':
        continue
    print(char)
print('\n迴圈結束')
print('迴圈執行 %d 次' %cnt)


c
o
n
e
n

迴圈結束
迴圈執行 7 次




cnt=0
for char in 'content':
    cnt+=1
    if char == 't':
        pass
    print(char)
print('\n迴圈結束')
print('迴圈執行 %d 次' %cnt)

c
o
n
t
e
n
t

迴圈結束
迴圈執行 7 次

在迴圈中使用 pass 語句,執行程式後,你會發現什麼事也沒做,完全不起任何作用,只是一個空運算而已,那問題就來了:
如果什麼事都不做,就不用寫拉,那 pass 語句是要做什麼的? ……
其實有時候會有非寫不可的情況!!
pass 就像是 To do 的概念,在寫程式的時候,有時候想的比實際寫出來的速度快,例如定義一個函數,但還沒有實作出來,空著內容不寫又會產生語法錯誤,這時就會使用 pass 來替代,當作是個指標,提醒自己之後要來完成。












>>> for letter in 'Python':
print(letter,end=' ')


P y t h o n


>>> w=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
>>> for days in w:
print(days,end=' ')


Sun Mon Tue Wed Thu Fri Sat



>>> for i in range(1,11,2):
print(i,end=' ')


1 3 5 7 9



>>> for i in range(10,1,-3):
print(i,end=' ')


10 7 4


>>> for i in range(1,10):
print(i,end='')


123456789
>>> for i in range(1,10):print(i,end=' ')

1 2 3 4 5 6 7 8 9


>>> r=range(1,11,2)
>>> print(r)
range(1, 11, 2)
>>> print(type(r))
<class 'range'>
>>> for i in r:
print(i,end=' ')


1 3 5 7 9


-------------------------- if 判斷
x=int(input('x='))
if x<0:
    print('成績小於0')
elif x>100:
    print('成績大於100')
elif x<60:
    print('成績不及格')
else:
    print('成績及格')






>>> n=int(input('輸入一整數:'))
輸入一整數:6
>>> if n%2==0:
print('偶數')
else:
print('奇數')


偶數



--------------------------交換數值

>>> a=5
>>> b=10
>>> a,b=b,a
>>> a,b
(10, 5)

2019年11月17日 星期日

CH6 python 運算





---------------------------------

---------------------------------

---------------------------------
---------------------------------

---------------------------------

---------------------------------
---------------------------------

---------------------------------

---------------------------------
---------------------------------

---------------------------------
>>> a='12345'
>>> b=7
>>> a
'12345'
>>> b
7
>>> print(a,b)
12345 7

>>> c=12;d=c+2
>>> c,d
(12, 14)

>>> list1=[5,4,7,1,6]
>>> print(sorted(list1))   #排序 小-->大
[1, 4, 5, 6, 7]



---------------------------------

>>> a=8
>>> b=13
>>> a&b
8

>>> a=3
>>> b=15
>>> a&b
3

>>> a=3
>>> b=15
>>> a|b
15

>>> a=8
>>> b=13
>>> a|b
13

>>> 11<<2
44                    #乘 2**2
>>> 11>>2
2                        #除 2**2

>>> a=1
>>> ~a 
-2
# 0001 --> 1110 即 以1's補數法,表示的負整數

>>> a=4
>>> ~a
-5
#4 --> 0100 --> 1011 --> -5


>>> a=2
>>> b=3
>>> a^b
1

>>> a=5
>>> b=7
>>> a^b
2

>>> a=2
>>> b=7
>>> a^b
5

>>> a=3
>>> b=15
>>> a^b
12
---------------------------------

>>> a=16
>>> bin(a)
'0b10000'
>>> oct(a)
'0o20'
>>> hex(a)
'0x10'





---------------------------------

>>> a=True
>>> b=False
>>> if(a):
print('True')
else:
print('False')

True

>>> c=(5>3)
>>> if c:
print('True')
else:
print('False')

True

>>> if(2):
print('True')
else:
print('False')

True

>>> if(0):
print('True')
else:
print('False')

False





>>> list1=[1,2,3]
>>> list2=[4,5,6]

>>> list1==list2
False

>>> list1=list2
>>> list1
[4, 5, 6]



---------------------------------運算

>>> b=a[0:2]+'A'+a[3:5]
>>> print(b)
12A45


>>> print(a[1:3])
23

>>> a='12345'
>>> for i in range(0,5):
print(i)


0
1
2
3
4



>>> a=123
>>> b="567"
>>> a+int(b)
690
>>> str(a)+b
'123567'
>>> c=str(a)+b
>>> c
'123567'
>>> c[3:5]
'56'



>>> print("c:\\workspace")
c:\workspace

>>> print(R"c:\\workspace")
c:\\workspace


>>> a="Hello"
>>> b="Python"
>>> a+b
'HelloPython'
>>> a*2
'HelloHello'
>>> a[1]
'e'
>>> a[2:4]
'll'
>>> 'H' in a
True
>>> 'M' not in a
True



>>> a=5
>>> b=3
>>> a+=b
>>> a
8


CH5 python 資料型態

2019年10月30日 星期三

CH4 認識Python基本語法

--------------------------
--------------------------

--------------------------

--------------------------
--------------------------

--------------------------

--------------------------4.3 語法規則









--------------------------4.2.8 函數

內定函數:
>>> pow(3,2)
9

自訂函數:

外部函數:在系統外,先導入 import 套件或模組才能執行
>>> import math
>>> math.sqrt(100)
10.0












--------------------------

運算的種類
數值運算:+   -   *   /   %   //   **
字串運算:+   *   [ ]
邏輯運算:AND   OR   NOT
比較運算:<   >   ==   !=   <>   >=   <=
位元運算:&   |   ~


資料型別
數字 digit
文字 character
字串 string
容器 container --> 陣列

  1. 列表 list   [ ]
  2. 元組 tuple   ( )
  3. 字典 dictionary   { }
  4. 集合 set   { }







--------------------------



>>> print("%4.3f" %12.3)   #浮點數
12.300
>>> print("%e" %12.3)       #浮點數(科學記數法)
1.230000e+01




>>> print("%d" %10)
  10
>>> print("%4d" %10)          #10進制
  10
>>> print("%04d" %10)   
0010

>>> print("%4o" %10)          #8進制
  12

>>> print("%4x" %10)        #16進制
   a
>>> print("%+4x" %10)
  +a


>>> print("I'm %s. I'm %d year old" %('Tom',30))
I'm Tom. I'm 30 year old

--------------------------


>>> ord('!')          #ASCII Code
33

>>> print("%c" %33)
!
>>> chr(33)          #10進制
'!'
>>> print("\41")   #8進制
!
>>> print("\x21")  #16進制
!


--------------------------

>>> a=123.45
>>> print('%6.2f%%' %a)
123.45%


--------------------------

print("\\x41 is \x41.\n")
\x41 is A.      #16進制


print("\\101 is \101.\n")
\101 is A.      #8進制

 

-------------------------數字,文字互轉

ord("A")
65

chr(65)
'A'

print("%c" %65)
A

print("\101")
A

print("\x41")
A

-----------------數字,進制互轉

bin(65)
'0b1000001'

print("%0b" %65) 
Traceback (most recent call last):
  File "<pyshell#97>", line 1, in <module>
    print("%0b" %65)
ValueError: unsupported format character 'b' (0x62) at index 2

oct(65)
'0o101'

print("%0o" %65)
101

hex(65)
'0x41'

print("%0x" %65)
41

 

 

-------------------------

a=65
b=92
print('阿珠的成績:'+str(a)+', 阿花的成績:'+str(b))
print('阿珠的成績:%2d, 阿花的成績:%2d'  %(a,b))
print('阿珠的成績:{}, 阿花的成績:{}'.format(str(a),str(b)))


阿珠的成績:65, 阿花的成績:92
阿珠的成績:65, 阿花的成績:92
阿珠的成績:65, 阿花的成績:92

CH3 python 語法熟悉度練習







n=[]
for i in range(0,10):
    i=(int(input('輸入第'+str(i+1)+'數字:')))
    n.append(i)
print(n)
print(end='\n')

a=int(input('開始位置:'))
b=int(input('結束位置:'))
print('從 ',a,' 到 ',b,' 的總和=',sum(n[a-1:b]))



輸入第1數字:10
輸入第2數字:9
輸入第3數字:8
輸入第4數字:7
輸入第5數字:6
輸入第6數字:5
輸入第7數字:4
輸入第8數字:3
輸入第9數字:2
輸入第10數字:1
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]



開始位置:2
結束位置:4
從  2  到  4  的總和= 24

索引: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
       [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
位置: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

sum(n[1:4])   -->   sum(n[a-1:b])
=9+8+7
-----------------------------------------------------------

n=[]
for i in range(0,5):
    i=(int(input('輸入第'+str(i+1)+'數字:')))
    n.append(i)
print(n)
print(end='\n')


for i in range(0,5):
      print('n[',i,']=',n[i])


輸入第1數字:5
輸入第2數字:4
輸入第3數字:3
輸入第4數字:2
輸入第5數字:1
[5, 4, 3, 2, 1]

n[ 0 ]= 5
n[ 1 ]= 4
n[ 2 ]= 3
n[ 3 ]= 2
n[ 4 ]= 1




-----------------------------------------------------------

a=[29,11,42,75,64,35]
for i in range(0,6):
    print('%2d' %i,end=' ')
 
print()

for i in range(0,6):
    print(a[i],end=' ')


 0  1  2  3  4  5
29 11 42 75 64 35



-----------------------------------------------------------

n=[]
for i in range(0,5):
    n.append(int(input('輸入第'+str(i+1)+'數字:')))

print(n)


輸入第1數字:6
輸入第2數字:7
輸入第3數字:8
輸入第4數字:9
輸入第5數字:10
[6, 7, 8, 9, 10]




-----------------------------------------------------------

rainbow=['紅','澄','黃','綠','藍','靛','紫']
print(rainbow[0:3])
print(rainbow[2:4])
print(rainbow[1])

print(rainbow[:4])
print(rainbow[3:])


['紅', '澄', '黃']
['黃', '綠']

['紅', '澄', '黃', '綠']
['綠', '藍', '靛', '紫']






-----------------------------------------------------------

scores=[20,40,60,80,100]
print('學科分數:',end='')
for grade in scores:
    print(grade,end=' ')
print(end='\n')         #同 print()

avg=sum(scores)/len(scores)
print('平均=',avg)

print('調整後的分數:',end='')
for i in range(0,len(scores)):
    scores[i]=(scores[i]**0.5)*10
    print('%.2f' %scores[i],end=' ')
print(end='\n')

new_avg=sum(scores)/len(scores)
print('新平均:',new_avg)
print('新平均:%.3f' %new_avg)


學科分數:20 40 60 80 100
平均= 60.0
調整後的分數:44.72 63.25 77.46 89.44 100.00
新平均: 74.97385975550067
新平均:74.974



----------------------------------------------------------- list

fruits=['蘋果','香蕉','西瓜','芒果']

fruits.append('番石榴')
print(fruits)

fruits.insert(2,'鳳梨')
print(fruits)

fruits.pop()
print(fruits)

fruits.remove('西瓜')
print(fruits)

fruits.clear()
print(fruits)


['蘋果', '香蕉', '西瓜', '芒果', '番石榴']
['蘋果', '香蕉', '鳳梨', '西瓜', '芒果', '番石榴']
['蘋果', '香蕉', '鳳梨', '西瓜', '芒果']
['蘋果', '香蕉', '鳳梨', '芒果']
[]


-----------------------------------------------------------

op=input('輸入運算符號 +-*/:')
a=int(input('整數1:'))
b=int(input('整數2:'))

if op==('+'):
    print(a+b)
elif op==('-'):
    print(a-b)
elif op==('*'):
   print(a*b)
elif op==('/'):
    print(a/b)
else:
    print('輸入錯誤!')



-----------------------------------------------------------

age=int(input('輸入年齡:'))
if (age>70):
    print('老年')
elif(age<30):
    print('青年')
else:
    print('壯年')

-----------------------------------------------------------

a=5
b=2
print('a+b=',a+b)
print('a-b=',a-b)
print('a*b=',a*b)
print('a/b=',a/b)
print('a%b=',a%b)
print('a//b=',a//b)
print('a**b=',a**b)


a+b= 7
a-b= 3
a*b= 10
a/b= 2.5
a%b= 1
a//b= 2
a**b= 25



-----------------------------------------------------------

a=input()
print('a=',a)


na=input('輸入你的名字:')
print('你的名字:',na)


-----------------------------------------------------------

a=[2,4,6,8,10]
for i in range(0,len(a)):
    print(a[i]*a[i])
    a[i]=a[i]*a[i]
    print(a)




-----------------------------------------------------------

list=['Jerome',0.38,1234,True]
for i in range(0,len(list)):
    print(list[i],type(list[i]))

print('變數是string的有:')
for i in range(0,len(list)):
    if isinstance(list[i],str):
        print(list[i],type(list[i]))



Jerome <class 'str'>
0.38 <class 'float'>
1234 <class 'int'>
True <class 'bool'>
變數是string的有:
Jerome <class 'str'>

----------------------------------------------------------- 猜數字
ans=35
for guessChance in range(0,3):
    guess=int(input("Please input a number(1~100):"))
    if ans==guess:
        print('答對了')
        break
    else:
        print('猜錯了')
print('game over')


----------------------------------------------------------- 串列


list=['Jerome',0.38,1234,True]
for i in list:
    print (i)


a=['Jerome',0.38,1234,True]
for i in range(0,len(a)):
    print(a[i])




----------------------------------------------------------- 9*9

for i in range(1,10):
    for j in range(1,10):
        print(i*j,end=' ')   #end='' 接續印
    print()                       #換行

--------------------------------------------------------------------

for i in range(1,10):
    for j in range(1,10):
        if(i*j<10):print(' ',end='')   #個位數,前加上一個空格
        print(i*j,end=' ')
    print()

--------------------------------------------------------------------

for i in range(1,10):
    for j in range(1,10):
        print("%3d" %(i*j),end='')
    print()



--------------------------------------------------------------------
for i in range(1,10):
    for j in range(1,10):
        print("{0}*{1}={2:2d}\t".format(i,j,i*j),end="")
    print()

    
1*1= 1    1*2= 2    1*3= 3    1*4= 4    1*5= 5    1*6= 6    1*7= 7    1*8= 8    1*9= 9   
2*1= 2    2*2= 4    2*3= 6    2*4= 8    2*5=10    2*6=12    2*7=14    2*8=16    2*9=18   
3*1= 3    3*2= 6    3*3= 9    3*4=12    3*5=15    3*6=18    3*7=21    3*8=24    3*9=27   
4*1= 4    4*2= 8    4*3=12    4*4=16    4*5=20    4*6=24    4*7=28    4*8=32    4*9=36   
5*1= 5    5*2=10    5*3=15    5*4=20    5*5=25    5*6=30    5*7=35    5*8=40    5*9=45   
6*1= 6    6*2=12    6*3=18    6*4=24    6*5=30    6*6=36    6*7=42    6*8=48    6*9=54   
7*1= 7    7*2=14    7*3=21    7*4=28    7*5=35    7*6=42    7*7=49    7*8=56    7*9=63   
8*1= 8    8*2=16    8*3=24    8*4=32    8*5=40    8*6=48    8*7=56    8*8=64    8*9=72   
9*1= 9    9*2=18    9*3=27    9*4=36    9*5=45    9*6=54    9*7=63    9*8=72    9*9=81


//   \t Tab ,end='' 以空格結束,不寫預設為換行