內容選單標籤

2021年7月21日 星期三

增能Python-程式設計與資料結構




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




程式設計與資料結構
---------------------------------------------------------------------

'''
輸入任一長度數列,中間以<space>隔開,最後1碼為控制碼:
1:max
2:min
3:sum
'''

def f1(x):
    Lst=[]
    for i in x.split(' '):
        Lst.append(int(i))
            
    lstIndex=len(Lst)-1
    lstValue=Lst[lstIndex]
    
    if(lstValue==1):
        return "max="+str(max(Lst[:lstIndex]))
    elif(lstValue==2):
        return "min="+str(min(Lst[:lstIndex]))
    elif(lstValue==3):
        return "sum="+str(sum(Lst[:lstIndex]))

x=input("Please input sequence of numbers separated by spaces:")
print(f1(x))
== RESTART: F:/python/00.py =========================
Please input sequence of numbers separated by spaces:1 2 3 4 5 1
max=5
>>> 
== RESTART: F:/python/00.py =========================
Please input sequence of numbers separated by spaces:1 2 3 4 5 2
min=1
>>> 
== RESTART: F:/python/00.py =========================
Please input sequence of numbers separated by spaces:1 2 3 4 5 3
sum=15





---------------------------------------------------------------------
'''
輸入數個數字文字串,找出每一列中最小值,再從每一列中最小值,找出最大值
'''

Lst=[]
while True:
    tmp=[]
    x=input("數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:")
    if x==' ':break
    tmp=[int(i) for i in x.split(' ')]
    Lst.append(tmp)

print("================================")
tmpLst=[]
for i in range(len(Lst)):
    tmpLst.append(min(Lst[i]))
    print("第 ",i+1," 列最小= ",min(Lst[i]))
print("找出的最小數列中,最大=",max(tmpLst) )

== RESTART: F:/python/00.py =========================
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:1 2 3
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:4 5
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:6
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入: 
================================
第  1  列最小=  1
第  2  列最小=  4
第  3  列最小=  6
找出的最小數列中,最大= 6



個功能以def 分出
---------------------------------------------------------------------
def FindMinIntLst(x):
    for i in range(len(x)):    
        print("第 ",i+1," 列最小= ",min(x[i]))

def FindMaxIntLst(x):
    for i in range(len(x)):    
        print("第 ",i+1," 列最大= ",max(x[i]))

def MaxInMins(x):
    tmpLst=[]
    for i in range(len(Lst)):
        tmpLst.append(min(Lst[i]))        
    print("找出的最小數中,最大=",max(tmpLst) )        

'''輸入任意個數列'''
Lst=[]
while True:
    tmp=[]
    x=input("數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:")
    if x==' ':break
    tmp=[int(i) for i in x.split(' ')]
    Lst.append(tmp)

    
print()
print("原輸入數列",Lst)
print("==============================")
FindMinIntLst(Lst)
print("-----------------")
FindMaxIntLst(Lst)
print("-----------------")
MaxInMins(Lst)

== RESTART:F:\python\00.py===========================
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:1 2 3
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:4 5
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:6
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入: 

原輸入數列 [[1, 2, 3], [4, 5], [6]]
==============================
第  1  列最小=  1
第  2  列最小=  4
第  3  列最小=  6
-----------------
第  1  列最大=  3
第  2  列最大=  5
第  3  列最大=  6
-----------------
找出的最小數列中,最大= 6






個功能以def 分出 ~~~~~~~save as 00.py
---------------------------------------------------------------------
#輸入文字列轉成整數列
def StrToIntLst(x):
    Lst=[]
    for i in x.split(' '):
        Lst.append(int(i))
    return Lst


#找出整數列中最大數
def FindMaxLst(x):
    MaxN=x[0]
    for i in x:
        if MaxN<i:MaxN=i
    return MaxN


#找出整數列中最小數
def FindMinLst(x):
    MinN=x[0]
    for i in x:
        if MinN>i:MinN=i
    return MinN


#加總整數列
def SumLst(x):
    Tmp=0
    for i in x:
        Tmp+=i
    return Tmp



x=input("數列中間以<space>隔開,最後1碼 1:max 2:min 3:sum。請輸入:")

#最後1碼,控制碼
CtrlCode=x[len(x)-1]

  
IntLst=StrToIntLst(x[:-2])
print()
print("輸入原數列:",IntLst)


if CtrlCode=='1':
    TheMax=FindMaxLst(IntLst)
    print("最大數:",TheMax)
elif CtrlCode=='2': 
    TheMin=FindMinLst(IntLst)
    print("最小數:",TheMin)
elif CtrlCode=='3':     
    TheSum=SumLst(IntLst)
    print("數列加總:",TheSum)


== RESTART:F:\python\00.py===========================
數列中間以<space>隔開,最後1碼 1:max 2:min 3:sum。請輸入:20 14 63 7 1 2 60 1

輸入數列: [20, 14, 63, 7, 1, 2, 60]
最大數: 63


== RESTART:F:\python\00.py===========================
數列中間以<space>隔開,最後1碼 1:max 2:min 3:sum。請輸入:20 14 63 7 1 2 60 2

輸入原數列: [20, 14, 63, 7, 1, 2, 60]
最小數: 1


== RESTART:F:\python\00.py===========================
數列中間以<space>隔開,最後1碼 1:max 2:min 3:sum。請輸入:20 14 63 7 1 2 60 3

輸入原數列: [20, 14, 63, 7, 1, 2, 60]
數列加總: 167








---------------------------------------------------------------------
#任意個文字列轉成整數列
def StrToIntLst(x):
#x="1 2 3^4 5^6^" ==> strLst[['1', '2', '3'], ['4', '5'], ['6']]    
    strLst=[]
    for i in (x[:-1].split('^')):
        strLst.append(i.split(' '))

#strLst[['1', '2', '3'], ['4', '5'], ['6']] ==> [[1, 2, 3], [4, 5], [6]]
    intLst=[]
    for i in range(len(strLst)):
        intLst.append([int(j) for j in strLst[i]])

    return intLst

    
#找出整數列中最大數
def FindMaxLst(x):
    MaxN=x[0]
    for i in x:
        if MaxN<i:MaxN=i
    return MaxN


#找出整數列中最小數
def FindMinLst(x):
    MinN=x[0]
    for i in x:
        if MinN>i:MinN=i
    return MinN



'''輸入任意個文字列'''
tmpS=""
while True:
x=input("數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:")
if x==' ':break
tmpS=tmpS+x+'^'

Lst=StrToIntLst(tmpS)
print("輸入原數列:",Lst)



AllMins=[];cnt=0
for i in Lst:
    cnt+=1
    TheMin=FindMinLst(i)
    print("第",cnt,"列最小值為:",TheMin)    
    AllMins.append(TheMin)    


TheMaxInAllMins=FindMaxLst(AllMins)    
print("各列最小值中的最大值為:",TheMaxInAllMins)


==RESTART:F:\python\01.py=========================

數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:2 5 -1
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:13 2 6 8
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:7 7
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入: 
輸入原數列: [[2, 5, -1], [13, 2, 6, 8], [7, 7]]
第 1 列最小值為: -1
第 2 列最小值為: 2
第 3 列最小值為: 7
各列最小值中的最大值為: 7







#任意個文字列轉成整數列
def StrToIntLst(x):
    #x="1 2 3^4 5^6^" ==> strLst[['1', '2', '3'], ['4', '5'], ['6']]    
    strLst=[]
    for i in (x[:-1].split('^')):
        strLst.append(i.split(' '))

    #strLst[['1', '2', '3'], ['4', '5'], ['6']] ==> [[1, 2, 3], [4, 5], [6]]
    intLst=[]
    for i in range(len(strLst)):
        intLst.append([int(j) for j in strLst[i]])

    return intLst

    



'''輸入任意個文字列'''
tmpS=""
while True:
x=input("數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:")
if x==' ':break
tmpS=tmpS+x+'^'

Lst=StrToIntLst(tmpS)
print("輸入原數列:",Lst)



#數列 list 找最大值、最小值使用 python 內建函式 Built In Function 
AllMinsLst=[]
for i in range(len(Lst)):
    AllMinsLst.append(min(Lst[i]))
    print("第 ",i+1," 列最小值為: ",min(Lst[i]))
    
print("各列最小值中的最大值為: ",max(AllMinsLst) )

==RESTART:F:\python\01.py==========================

數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:1 2 3
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:4 5
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入:6
數字間隔,空白鍵,Enter換行。只按空白鍵,再Enter離開,請輸入: 
輸入原數列: [[1, 2, 3], [4, 5], [6]]
第  1  列最小值為:  1
第  2  列最小值為:  4
第  3  列最小值為:  6
各列最小值中的最大值為:  6






模擬 2維陣列
---------------------------------------------------------------------
>>> Lst=[[1,2,3],[3,4],[6]]

>>> for i in Lst:    //i 為list 物件
print(i)
[1, 2, 3]
[3, 4]
[6]


>>> for i in range(len(Lst)):    //i=0 ,1 ,2
print(Lst[i])
[1, 2, 3]
[3, 4]
[6]



>>> for i in range(len(Lst)):
print("i=",i)
for j in range(len(Lst[i])):
print("j=",j,end='  ')
print(">>",Lst[i][j] ,end='  ')

print()
i= 0
j= 0  >> 1  j= 1  >> 2  j= 2  >> 3  
i= 1
j= 0  >> 3  j= 1  >> 4  
i= 2
j= 0  >> 6 







---------------------------------------------------------------------
import os
def FileArch(x):
    for i in os.listdir(x):        
        if os.path.isdir(x+"/"+i):

            '''
            如果是目錄,遞迴 Recursive 往下探究是否還有下層
            x="D:/file_arch/Dir1" 
            os.path.abspath(x) ==> 'D:\\file_arch\\Dir1'
            os.sep ==> '\\'
            os.path.abspath(x+"/"+i).count(os.sep) 統計 '\\' 數量,即此檔案、目錄在第幾層
            依題意,從第3層起,依次給予一組3個空白建,再開始 print
            '''
            print("   "*(os.path.abspath(x+"/"+i).count(os.sep)-2),end='')
            print(i,"(dir)")
            FileArch(x+"/"+i)
        else:
            print("   "*(os.path.abspath(x+"/"+i).count(os.sep)-2),end='')
            print(i)

            

strInput=input("輸入查詢的目錄路徑:D:/file_arch") or "D:/file_arch"
Arch=FileArch(strInput)

== RESTART:F:/python/03.py===========================
輸入查詢的目錄路徑:D:/file_arch
A.txt
B.txt
C.txt
Dir1 (dir)
   A1.txt
   B1.txt
   C1.txt
   D1.txt
   Dir11 (dir)
      Dir111 (dir)
         A111.txt
         B111.txt
Dir2 (dir)
   A2.txt
   B2.txt
Dir3 (dir)
   A3.txt
   B3.txt
   C3.txt








可求3數以上GCD LCM
---------------------------------------------------------------------

def twoGCD(x,y):
    if x<y:x,y=y,x
    if x%y==0:
        return y
    else:
        return twoGCD(y,x%y)


def moreGCD(x):
    tmpG=twoGCD(x[0],x[1])
    for i in range (2,len(x)):
        tmpG=twoGCD(tmpG,x[i])
    return tmpG            
   
#多個數求GCD,兩兩依序找出GCD,最後即所求




def twoLCM(x,y):
    return x*y//twoGCD(x,y)


def moreLCM(x):
    tmpL=twoLCM(x[0],x[1])
    for i in range(2,len(x)):
        tmpL=twoLCM(tmpL,x[i])        
    return tmpL

#多個數求LCM,兩兩依序找出LCM,最後即所求



InputStr=input("<Space>隔開、<Enter>離開。\n最後一碼控制符:\n1:求LCM\n2:求GCD。\n請輸入任意個整數串列:")
Lst=[]
Lst=[int(i) for i in InputStr.split(' ')]
#Lst=[12, 15, 18, 2]


if Lst[-1]==1:
    print("LCM:",moreLCM(Lst[:-1]))
elif Lst[-1]==2:    
    print("GCD:",moreGCD(Lst[:-1]))

#自己測試用
else:
    print("LCM:",moreLCM(Lst[:-1]))
    print("GCD:",moreGCD(Lst[:-1]))


=RESTART:F:\python\HW2(加)\HW2.py==================
<Space>隔開、<Enter>離開。
最後一碼控制符:
1:求LCM
2:求GCD。
請輸入任意個整數串列:2 4 6 8 10 3
LCM: 120
GCD: 2
---------------------------------------------------------------------

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



沒有留言:

張貼留言