---------------------------------------------------------------------
程式設計與資料結構
---------------------------------------------------------------------
'''
輸入任一長度數列,中間以<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
---------------------------------------------------------------------
---------------------------------------------------------------------
沒有留言:
張貼留言