內容選單標籤

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