2022年12月28日 星期三

Python 初學者的 11 道練習題

 https://buzzorange.com/techorange/2021/03/02/11-projects-for-python-beginner/


參考解答

# n = int(input('請輸入一個數字:(1-1000)'))

# if n%2==0:

#     print("偶數")

# else:

#     print("奇數")

    

# import random

# main = ['王小美','林小明','李大華'] 

# location = ['教室','浴室','公車上','廁所']

# do = ['看書','刷牙','吃東西','睡覺' ]


# a,b,c = random.randint(0,2),random.randint(0,3),random.randint(0,3)

# msg = main[a]+"在"+location[b]+do[c] 

# print(msg)


# 畫面:你心裡在想什麼?

# 輸入:我要成為寫程式的專家

# 輸出:你用了 10 個文字述說內心的想法


# a = input('你心裡在想什麼?')

# n = len(a)

# msg = f'你用了 {n} 個文字述說內心的想法'

# print(msg)


# 畫面:你心裡在想什麼?

# 輸入:我要成為寫程式的專家

# 輸出:你用了 10 個文字述說內心的想法

# a = input('你心裡在想什麼?')

# n = len(a)

# msg = f'你用了 {n} 個文字述說內心的想法'

# print(msg)



# 字母縮寫(What’s my acronym?)

# 使用者輸入一段話,程式抓出單字的第一個字母,並輸出縮寫。


# 例如:


# 輸入:As Soon As Possible

# 輸出:ASAP


# 英文縮寫

# english=input("輸入英文句子:")

# index_list=[]

# suoxie=english[0]

# for i, element in enumerate(english):

#     if element==" ":

#         index_list.append(i)

# for i in index_list:

#     suoxie+=english[i+1]

# print(suoxie.upper())


# english=input("輸入英文句子:")

# english = english.split()

# for i in english:

#     print(i[0].upper(),end='')



# Email 域名判斷器(Email slicer)

# 請用戶輸入 Email 地址,然後判斷它是自定義域名還是熱門域名。


# 例如:


# 輸入:mary.jane@gmail.com

# 輸出:這是註冊在 Google 之下的 Email 地址

# 輸入:peter.pan@myfantasy.com

# 輸出:這是在 MyFantasy 之下自定義域


a = input('輸入 Email 地址?')

a = a.split('@')

# print(a)

b = a[1].split('.')

# print(b[0])

if b[0] in ['gmail','yahoo','cyvs']:

    msg = f'這是註冊在 {b[0]} 之下的 Email 地址'

else:

    msg = f'這是在  {b[0]} 之下自定義域'

print(msg)

2022年12月8日 星期四

2022年11月29日 星期二

Prime

 import time

n = 2*10**6


stTime = time.time()

p = [2,3,5]

for i in range(6,n,6):

    pflag = True

    for j in p:

        if (i+1)%j==0 :

            pflag = False

            break

        if j*j>i+1:break

    if pflag:p.append(i+1)

    pflag = True

    for j in p:

        if (i+5)%j==0 :

            pflag = False

            break

        if j*j>i+5:break

    if pflag:p.append(i+5)

print(p[-5:])

edTime = time.time()

print(edTime-stTime,len(p))

Fibonacci

 a = [0,1,1,2]

while  abs(a[-1]/a[-2]-a[-2]/a[-3])>0.001:

    t = a[-1]+a[-2]

    a.append(t)

print(*a,a[-1]/a[-2])

2022年11月22日 星期二

丙軟目錄製作要注意

 

目錄製作要注意

1.         直接開檔案,沿用原檔案邊界設定

2.         分頁要用:版面配置→分隔設定→分節符號→下一頁

3.         圖標打完新注音的「:」要先按Enter

4.         看題目

2022年11月21日 星期一

樂透開獎統計

 import random

as7 = []
for i in range(500):
    a = list(range(42))
    a = [i +1 for i in a ]

    for i in range(len(a)):
        t = random.randint(0,41)
        a[i],a[t] = a[t],a[i]
    s7 = a[:7]
    as7 = as7+s7
# print(as7)

sas7 = []
for i in range(1,42+1):
    sas7.append([as7.count(i),i])
sas7.sort()
sas7.reverse()

sas7head = sas7[:42]
sum_sas7head = 0
for i in sas7head:
    print(i[1],':',i[0])
    sum_sas7head += i[0]
print(sum_sas7head )

2022年11月15日 星期二

python list sample

 lines = [i for i in open('c:\\testdata\data1.txt','r',encoding=('utf-8'))]


d = []

for line in lines:

    no,name,ch,en,ma = line.split('\t')    

    no,ch,en,ma = int(no),int(ch),int(en),int(ma)

    total = ch+en+ma

    avg = int(total/3*100+0.5)/100

    t = [no,name,ch,en,ma,total,avg,1]

    d.append(t)


for i in range(len(d)):

    for j in range(len(d)):

        if d[i][5] <d[j][5]:

            d[i][7] = d[i][7]+1


head = ['座號','姓名','\t國文','英文','數學','總分','平均','名次']

head = '\t\t'.join(head)

print(head)

for i in d:

    t = [str(j) for j in i]

    t= '\t\t'.join(t)

    print(t)

2022年10月20日 星期四

Prime

 import time

n = 5000

p = []

# m1

st_time = time.time() 

a = [2]

for i in range(3,n+1,2):

    isP = True

    for j in a:

        if j*j>i: break

        if i%j==0:

            isP = False

            break

    if isP :a.append(i)

print(len(a))

end_time = time.time()

p.append( end_time-st_time)


# m2 

st_time = time.time()

a = []

for i in range(1,n+1):

    c = 0

    for j in range(1,i+1):

        if i%j==0:

            c+=1

    if c==2: a.append(i)

print(a)

print(len(a))

end_time = time.time()

p.append( end_time-st_time)


# m3 

st_time = time.time()

a = [i for i in range(2,n+1)]


for j in range(2,int(n**0.5)+1):

    a = [i for i in a if i%j!=0]

    a.append(j)


a.sort()


end_time = time.time()

p.append( end_time-st_time)


# m4

st_time = time.time()

a = [2,3,5]

for i in range(6,n-3,6):

    f = True

    for j in a:

        if (i+1)%j==0:

            f = False

            break

    if f :    

        a.append(i+1)

        

    f = True

    for j in a:

        if (i+5)%j==0:

            f = False

            break

    if f :    

        a.append(i+5)

print(a)

print(len(a))

end_time = time.time()

p.append( end_time-st_time)


#print final

print(p)

ntimes = [int(i/min(p)) for i in p]

print(ntimes)

2022年7月6日 星期三

replace 萬用字元

 


replace sample

 Public Sub RE2L()


For j = 1 To ActiveDocument.Paragraphs.Count

    text1 = ActiveDocument.Paragraphs(j).Range.Text

    

    For i = 90 To 111

      text1 = Replace(text1, i & "統測", " [" & i & "統測]")

    Next i

    ActiveDocument.Paragraphs(j).Range.Text = text1

Next j


End Sub

2022年6月10日 星期五

php upload pdf sample

 <?php 

move_uploaded_file($_FILES['fileupname']['tmp_name'],'upload/' . $_FILES['fileupname']['name']);


$files = scandir('upload');

for ($i=2;$i<count($files);$i++){

echo '同學作品:' . $i-1 . '<br>';

echo "<iframe src='upload/$files[$i]'></iframe>" . '<br>';

}

?>


key:

move_uploaded_file

$_FILES[]

tmp_name

upload/

scandir

count($files)

<iframe src='upload/$files[$i]'>

pdf upload sample

 <?php 

move_uploaded_file($_FILES['fname']['tmp_name'],'upload/' . $_FILES['fname']['name']);

$files = scandir('upload');

for($i=2;$i<count($files);$i++)

{

echo '同學上傳作品:' . $i-1 .'<br>';

echo "<iframe src='upload/$files[$i]' width=50% height=50%></iframe><br>";

}

?>

2022年6月9日 星期四

多項式相加

 # -*- coding: utf-8 -*-



# p = 2*x^5 + 3*x^2 + 2*x^1 + 5

# q = 2*x^3 + 3*x^1 + 6

# p+q = ?

# p*q = ?


# ans: 2*x^5 + 2*x^3 + 3*x^2 + 5*x^1+ 11


p = '2*x^5 + 3*x^2 + 2*x^1 + 5'

q = '2*x^3 + 3*x^1 + 6'


print('p=' + p)

print('q=' + q)


pl = p.replace(' ','').split('+')

ql = q.replace(' ','').split('+')

r = {}

for p in pl:

    p =[int(i) for i in p.split('*x^')]

    if len(p)>1:

        if p[1] in r:

            r[p[1]] += int(p[0])

        else:

            r[p[1]] = int(p[0])

    else:

        if 0 in r:

            r[0]+=p[0]

        else:

            r[0]=p[0]


for q in ql:

    q =[int(i) for i in q.split('*x^')]

    if len(q)>1:

        if q[1] in r:

            r[q[1]] += int(q[0])

        else:

            r[q[1]] = int(q[0])

    else:

        if 0 in r:

            r[0]+=q[0]

        else:

            r[0]=q[0] 


d =[ [k,v] for k,v in r.items()]

d.sort()

d.reverse()

sss = []

for i in d:

    sss.append(str(i[1]) + '*x^' + str(i[0]))

sss = '+'.join(sss)

print('p+q = ' + sss[:-4])



# multiply p q

if len(pl[-1])==1:

    pl[-1]=pl[-1]+'*x^0'

if len(ql[-1])==1:

    ql[-1]=ql[-1]+'*x^0'




pl = [i.split('*x^') for i in pl]

ql = [i.split('*x^') for i in ql]


pl = [[int(j) for j in i] for i in pl]

ql = [[int(j) for j in i] for i in ql]


# print(pl)

# print(ql)


r1 = []

lp = len(pl)

lq = len(ql)

for i in range(lp):

    for j in range(lq):

        r1.append([pl[i][0]*ql[j][0],pl[i][1]+ql[j][1]])

# print(r1)


r = {}

for i in r1:

    if i[1] in r:

        r[i[1]]+=i[0]

    else:

        r[i[1]]=i[0]

# print(r)


d =[ [k,v] for k,v in r.items()]

d.sort()

d.reverse()

sss = []

for i in d:

    sss.append(str(i[1]) + '*x^' + str(i[0]))

sss = '+'.join(sss)

print('p*q = ' + sss[:-4])

2022年6月5日 星期日

php html upload file sample

file upload 分享


建upload子目錄


fup.html 步驟


dw中插入

1. 表單

2. file 欄位, name設為 upfilename

3. submit 按鈕



fup.html 內容


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


<form method="post" action="fup.php" enctype="multipart/form-data" >


<input name="my_file" type="file">

<input name="submit" type="submit" value="上傳">


</form>




fup.php  內容

move_uploaded_file($_FILES['upfilename'][tmp_name],'upload/' . $FILES['upfilename']['name']);

 

Perfect Number

 #完美數


# n = 28

for n in range(1,1001):

    a = []

    for i in range(1,n):

        if n%i==0:

            a.append(i)

    if sum(a)==n:

        print(n,':perfect number')


runfile('C:/Users/j945935/.spyder-py3/untitled1.py', wdir='C:/Users/j945935/.spyder-py3')

6 :perfect number

28 :perfect number

496 :perfect number

XAXB

 # XAXB

p = '1234'

for q in [ '1234','1235','4321','4231','5678']:

    ac = 0

    bc=0

    for i in range(4):

        if p[i]==q[i]:

            ac+=1

        elif p[i] in q:

            bc+=1

    print(f'{ac}A{bc}B')


runfile('C:/Users/j945935/.spyder-py3/untitled0.py', wdir='C:/Users/j945935/.spyder-py3')

4A0B

3A0B

0A4B

2A2B

0A0B






2022年6月2日 星期四

php mysql

 <?php 

$conn2 = mysqli_connect('localhost','root','','test1');

$sqlstr = "select * from user where username = '" . $_POST['username'] . "'";

$result = mysqli_query($conn2,$sqlstr);

echo '<table width="400" border="1">';

while ($row = mysqli_fetch_assoc($result))

{

echo '<tr>';

echo '<td>';

echo $row['username'];

echo '</td>';

echo '<td>';

echo $row['password'];

echo '</td>';

echo '</tr>';

}

echo '</table>';

?>



$sqlstr = "select * from user where username = '" . $_POST['username'] . "'";

1  "select * from user where username = '      "

2   . $_POST['username'] . 

3     " ' "


說明:  

"select ......                 ' "  + $_POST['username']

+ " ' "


實際送出指令為

select * from user where username = ' $_POST['username']'

把字串拆成三段

1   select * from user where username = ' 

2   $_POST['username']

3   ’

最後 1、3 用雙引號包起來,再用句點把字串連起來。


2022年5月27日 星期五

switch ???

 #include <iostream>

using namespace std;

int main()

{

    int i =0;

    for (i=0;i<20;i++)

    {

        switch(i)

        {

            case 0:

            i+=5;

            cout<< i<<" ";

            case 1:

            i+=2;

            cout<< i<<" ";

            case 5:

            i+=5;

            cout<< i<<" ";

            default:

            i+=4;

            cout<< i<<" ";

            break;

        }

            cout<< i<<" ";

    }

    return 0;

}


//ans: 5 7 12 16 16 21 21 

2022年5月15日 星期日

dag

 graph = {

    'A':['B','C'],

    'B':['D','E'],

    'C':['E'],

    'D':['F'],

    'E':['F'],

    'F':[]    

    }


visited = set()

visiteds = []


def dfs(graph,visited,node):

    visiteds.append(node)

    if node not in visited:

        visited.add(node)

        print(node,end=' ')

        for neighbor in graph[node]:

            dfs(graph,visited,neighbor)


dfs(graph,visited,'A')

print(visiteds)

dag = set([i for i in visiteds if visiteds.count(i)>1])

print(dag)

2022年5月14日 星期六

prime

 # sol1

# def prime(n):

#     for  i in range(2,n+1):

#         j = 2

#         while  j<i:

#             if i%j==0:

#                 break

#             j+=1

#         if j==i:

#             print(i,end=', ')

# prime(100)


# sol2

p = [2]

for i in range(3,101):

    isp = True

    for j in p:

        if i%j==0:

            isp = False

            break

    if isp==True:

        p.append(i)

p = map(str,p)

p = ', '.join(p)

print(p)

2022年5月10日 星期二

二長方形重疊區域面積

 def dist(a,b,c,d):

    over = 0

    if b>=d>=a>=c: over=d-a

    elif d>=b>=a>=c : over = b-a

    elif b>=d>=c>=a : over = d-c

    elif d>=b>=c>=a:over = b-c

    else : over=0

    return over

x1,y1,w1,h1 = map(int,input().strip().split())

x2,y2,w2,h2 = map(int,input().strip().split())


xdist = dist(x1,x1+w1,x2,x2+w2)

ydist = dist(y1,y1+h1,y2,y2+h2)

area = xdist*ydist

print(area)

2022年5月5日 星期四

生成對抗網路 GAN

 

生成對抗網路


人工智慧

讓機器具有如同人類的思辨能力

機器學習

能夠達成人工智慧的方法,透過與人類相似的學習方法,訓練機器進行資料分類、處理與預測

深度學習

代表實現機器學習的技術,深層、多層類神經網路。

GAN由兩個網路構成

鑑別網路(Discriminating Network

生成網路(Generative Network

透過兩者相互對抗產生結果是其深度學習的運作原理。

比喻

GAN是一場鑑定師與仿畫家的比賽,仿畫家畫出假畫讓鑑定師評斷有多接近真品,根據評斷結果再繼續畫出比原本更好的作品,鑑定師也會透過不斷練習提升鑑定水準,最後結果就是一幅幾可亂真的機器畫。

卷積神經網路(Convoulutional Neural Network

適合處理空間資料

循環神經網路(Ruccurent Neural Network

擅長處理時間序列與語意結構判斷

對抗訓練是有史以來最酷的技術

FacebookAI研究院長楊立昆(Yann LeCun

對抗訓練是有史以來最酷的技術(Adversarial training is the coolest thing since sliced bread),對於GAN他也說:「它為創建無監督學習模型提供了強有力的算法框架,有望幫助我們為AI加入常識(common sense

GAN的應用

GAN應用在生成資料方面,如圖像與影音的生成、合成、辨識、修復等等,

進階則是輸入文本描述便能生成與形容相符的圖像,或者透過語言模型實現機器翻譯等。

Nvidia公司的GAN則是將白天的街景轉為夜晚,作為自動駕駛車輛的訓練樣本,解決夜晚圖像資料不足的問題。

展望

GAN在未來依舊可能真正實現「完全不靠人類就能自主學習的AI

 

生成對抗網路II

1.          非監督式學習的一種方法

2.          讓兩個神經網路相互博弈的方式進行學習。

3.          由一個生成網絡與一個判別網絡組成。

4.          從潛在空間(latent space)中隨機取樣作為輸入,其輸出結果需要盡量模仿訓練集中的真實樣本。

5.          判別網絡的輸入則為真實樣本或生成網絡的輸出,其目的是將生成網絡的輸出從真實樣本中盡可能分辨出來。

6.          而生成網絡則要盡可能地欺騙判別網絡。

7.          兩個網絡相互對抗、不斷調整參數,最終目的是使判別網絡無法判斷生成網絡的輸出結果是否真實。

 

 

 

資料來源:

1.          https://medium.com/@hiskio/%E7%94%9F%E6%88%90%E5%B0%8D%E6%8A%97%E7%B6%B2%E8%B7%AF%E5%88%B0%E5%BA%95%E5%9C%A8gan%E9%BA%BB-f149efb9eb6b

2.          https://zh.wikipedia.org/zh-tw/%E7%94%9F%E6%88%90%E5%AF%B9%E6%8A%97%E7%BD%91%E7%BB%9C


2022年5月1日 星期日

lcs

 def lcs(x,y,m,n):

    if m==0 or n==0:
        return 0
    elif (x[m-1]==y[n-1]):
        return lcs(x,y,m-1,n-1)+1
    else:
        return max(lcs(x,y,m,n-1), lcs(x,y,m-1,n))

x = 'abcd'
y = 'abdef'
print(lcs(x,y,len(x),len(y)))

參考資料來源:https://seanleetech.com/algorithm/47/

lis

 def lis(a):

    n = len(a)
    lis = [1]*n
    for i in range(1,n):
        for j in range(0,i):
            if a[j]<a[i]:
                lis[i] = max(lis[i],lis[j]+1)
    m = 0
    
    for i in range(n):
        m = max(m,lis[i])
    return m
a = [1,2,9,3,10,5,4,6]
print(lis(a))

字串小程式

 s = 'abcdeckba'

n = len(s)
a=[]

 # test5

# def f(s,c,n):
#     if c==n:
#         print()
#         return
#     print(s[c],end=' ')
#     return f(s,c+1,n)
# f(s,0,n)

# test4
# def f(s,c,n):
#     if c==n:
#         print()
#         return
#     print(s[c:]+s[:c],end=' ')
#     return f(s,c+1,n)
# f(s,0,n)

# test3
# def f(s,c,n):
#     if c==n:
#         print()
#         return
#     print(s[c:]+s[:c],end=' ')
#     return f(s,c+1,n)
# f(s,0,n)
# test1
# def f(s,x):
#     if x==n:
#         return
#     a.append(s[:x])
#     return f(s,x+1)
# f(s,0)
# print(a)

# test2
# for p in range(len(s)):
#     # p = n//2
#     rStr = s[p]
#     preStr =s[:p]
#     preStr = preStr[::-1]
#     postStr = s[p+1:]
#     # print(preStr,postStr)
#     for i in preStr:
#         if i in postStr:
#             if abs(preStr.find(i)- postStr.find(i))<=2:
#                 rStr = i + rStr + i
#                 t = list(preStr)
#                 t = t.remove(i)
#                 # print(t)
#                 if t:
#                     preStr = ''.join(t)
#                 else:
#                     preStr = ''
#                 t = list(postStr)
#                 t = t.remove(i)
#                 if t:
#                     postStr = ''.join(t)
#                 else:
#                     postStr = ''
#     print(rStr)

子字串回文

 s = 'abcdeckba'

n = len(s)
a=[]

def f1(s,rstr,p,n):
    if p==n: return
    if p==n//2:a.append(s[p])
    t = len(s)//2-len(rstr)//2+1
    # print(t)
    if s[p] in s[:t]:
        if len(rstr)<1 and s[p-1] != s[p]: 
            rstr = rstr+s[p]
        else:
            rstr = s[p]+rstr+s[p]
            a.append(rstr)
    print(rstr,end=' ')
    f1(s,rstr,p+1,n)
    return
f1(s,'',len(s)//2,n)
print(a)
aLen = [len(i) for i in a]
print(aLen) 
aLenMax = max(aLen)
print(aLenMax)
idx = aLen.index(aLenMax)
print(a[idx])


2022年4月28日 星期四

lambda 參考

 multiply = lambda x,y:x*y

print(multiply(3,2))


print((lambda x,y:x**y)(4,2))


numbers = list(range(20))

print(numbers)

result = list(filter(lambda x:x%2==0,numbers))

print(result)


result = list(map(lambda x:x*2,numbers))

print(result)


from functools import reduce

result = reduce(lambda x,y:x+y,numbers)

print(result)


資料來源:https://www.learncodewithmike.com/2019/12/python-lambda-functions.html

第二欄值Sort

 cars = [

    ["infiniti",2000],

    ["toyota",1000],

    ["smart",5000],

]

print(cars)

cars.sort()

# print(cars)

# print(sorted(cars,key=lambda car:car[1]))


print(cars)

n = len(cars)

for i in range(n):

    for j in range(i+1,n):

        if cars[i][1]>cars[j][1]:

            cars[i],cars[j]=cars[j],cars[i]

            

print(cars)

四捨五入自己寫

 f = '123.3456789'

def myround(f,fix):
    k =f[f.find('.')+fix+1]
    # print(k)
    if int(k) >=5:
        a = str(int(f[f.find('.')+fix])+1)
        a = f[:f.find('.')+fix]+a
    else:
        a = float(f[:f.find('.')+fix+1])
    if fix == 0:
        a = f[:f.find('.')]
    return(a)
for i in range(len(f)-f.find('.')-1):
    print(myround(f,i))

2022年4月27日 星期三

數字龍捲風

 d1 = '''

3 4 2 1 4
4 2 3 8 9
2 1 9 5 6
4 2 3 7 8
1 2 6 4 3
'''
d = [[j for j in i.split()] for i in d1.strip().split('\n')]

def go():
    global turn,ctr,r,c
    turn = turn % 4
    if turn ==0:
        c-=1
    elif turn==1:
        r-=1
    elif turn==2:
        c+=1
    elif turn ==3:
        r+=1  
    print(d[r][c],end='')
    ctr += 1
    if ctr>=n**2: exit()
turn = 0
n = 5

r,c =n//2,n//2
ctr = 0
print(d[r][c],end='')
ctr += 1
if n==1:exit()

for i in range(1,6):
    for j in range(i):
        go()
    turn +=1
    for j in range(i):
        go()
    turn +=1

Height of Tree

 class Node:

    def __init__(self,root=None,left=None,right=None):
        self.root = root
        self.left = left
        self.right = right

    def height(self):
        return 1+max(self.left.height() if self.left is not None else 0,
                     self.right.height() if self.right is not None else 0)

tree = [Node() for _ in range(1023)]
root = tree[0]

for i in range(len(tree)):
    l_child_idx,r_child_idx = (i+1)*2-1,(i+1)*2
    root_idx = (i-1)//2
    if root_idx :
        tree[i].root = tree[root_idx]
    if l_child_idx < len(tree):
        tree[i].left = tree[l_child_idx]
    if r_child_idx < len(tree):
        tree[i].right = tree[r_child_idx]

print(root.height())

資料來源:https://www.796t.com/post/N2dodnk=.html

小群體

 instr = '''

10
4 7 2 9 6 0 8 1 5 3
'''
d1 = instr.strip().split('\n')
n = int(d1[0])
r = list(range(n))
# print(r)

d = [int(i) for i in d1[1].split(' ')]
# print(d)

gs = []
t = set()
t.add(d[0])
t.add(r[0])
gs.append(t)

for j in range(1,len(d)):
    for i in gs:
        if d[j] in i or r[j] in i:
            i.add(d[j])
            i.add(r[j])
            break
        else:
            t = set()
            t.add(d[j])
            t.add(r[j])
            gs.append(t)

gs1 = []
for i in gs:
    if i not in gs1:
        gs1.append(i)
print(len(gs1))