▶ 6주차: 리스트, 딕셔너리, 튜플
# 변수 사용하여 출력
a,b,c,d=0,0,0,0 #변수사용
hap=0
a=int(input('첫 번째 숫자: '))
b=int(input('두 번째 숫자: '))
c=int(input('세 번째 숫자: '))
d=int(input('네 번째 숫자: '))
e=int(input('다섯 번째 숫자: '))
hap=a+b+c+d
print("합계: %d"%hap)
첫 번째 숫자: 1
두 번째 숫자: 2
세 번째 숫자: 3
네 번째 숫자: 4
다섯 번째 숫자: 5
합계: 10
# 리스트 사용하여 출력
aa=[0,0,0,0]
hap=0
aa[0]=int(input('1번째 숫자: '))
aa[1]=int(input('1번째 숫자: '))
aa[2]=int(input('1번째 숫자: '))
aa[3]=int(input('1번째 숫자: '))
hap=aa[]
aa=[]
aa.append(0)
aa.append(0)
aa.append(0)
aa.append(0)
print(aa)
aa=[]
for i in range(0,100):
aa.append(0)
len(aa)
100
aa=[] #빈 리스트를 생성 & 반복문
for i in range(0,4): #4번을 반복해 항목이 4개인 리스트로 만듦
aa.append(0) # i가 0에서 3까지 4번 반복
hap=0
for i in range(0,4):
aa[i]=int(input(str(i+1)+'번째 숫자: '))
hap=aa[0]+aa[1]+aa[2]+aa[3]
print("합계==> %d"%hap)
# input() 함수는 i가 0부터 시작하므로 i+1로 출력, str() 함수가 숫자를 문자로
# 변환한 후 n번째 숫자: 와 합쳐짐
1번째 숫자: 10
2번째 숫자: 2
3번째 숫자: 13
4번째 숫자: 2
합계==> 27
# 코드로 구현
aa=[] #빈 리스트 생성
bb=[] #빈 리스트 생성
value=0 # 0,2,4로 증가시킬 값
for i in range(0,100): #0~99로 100번 반복
aa.append(value) # i가 0일때 99-i는 99가 됨. i가 1일때는 98, i가 2면 97
value += 2
for i in range(0,100):
bb.append(aa[99,-i])
print('bb[0]에는 %d이, bb[99]에는 %d이 입력됩니다' %(bb[0], bb[99]))
# 음수값으로 접근
aa=[10,20,30,40] #-4까지만 접근 가능
print("aa[-1]은 %d, aa[-2]는 %d" % (aa[-1], aa[-2]))
aa[-1]은 40, aa[-2]는 30
# 콜론:을 이용한 범위 지정
aa=[10,20,30,40]
aa[0:3]
[10, 20, 30]
aa=[10,20,30,40]
aa[3:]
[40]
aa=[10,20,30,40]
aa[:2]
[10, 20]
aa=[10,20,30]
bb=[40,50,60]
aa+bb
[10, 20, 30, 40, 50, 60]
# 리스트의 항목 건너뛰며 추출
aa=[10,20,30,40,50,60]
#앞 2칸씩 건너뛰기
aa[::2]
[10, 30, 50]
#뒤에서 부터 2칸씩 건너뛰기
aa=[10,20,30,40,50,60]
aa[2::]
[30, 40, 50, 60]
#뒤에서부터 순차적으로
aa=[10,20,30,40,50,60]
aa[::-1]
[60, 50, 40, 30, 20, 10]
# 리스트 값의 변경
aa=[10,20,30]
aa[1]=200
aa
[10, 200, 30]
# 리스트 값의 변경 (2개)
bb=[10,20,30]
bb[1:2]=500,600
bb
[10, 500, 600, 30]
# 리스트 삭제
c=[0,1,2,3,4,5]
c[1:3]=[]
c
[0, 3, 4, 5]
# for문을 사용, 3행 4열짜리 리스트 생성 후 항목 1-12를 입력하고 출력
list1=[] #1차원 리스트 사용
list2=[] #2차원 리스트 사용
value=1
for i in range(0,3): #리스트 행 단위 만들기 위해 3회 반복
for k in range(0,4): #4회 반복해 항목 4개인 1차원 리스트 생성
list1.append(value)
value +=1
list2.append(list1) #2차원 리스트에 추가
list1=[] #1차원 리스트를 다시 비움
for i in range(0,3): #2차원 리스트 출력
for k in range(0,4):
print('%3d'% list2[i][k], end="") #리스트명[행][열] 방식으로 각 출력
print("")
실습
# 리스트를 이용 터틀 그래픽 응용 프로그램 만들기
#거북이 한마리의 1차원 리스트
# 1차원 리스트: [거북이,X위치,Y위치,거북이크기,거북이색상(R),거북이색상(G),거북이색상(B)]
# 2차원 리스트: [거북이1,X,Y,크기,R,G,B], [거북이2,X,Y,크기,R,G,B] ....
import turtle
import random
## 전역 변수 부분 ##
swidth, sheight = 500, 500
myTurtle, tX, tY, tColor, tSize, tShape = [None] * 6
shapeList= []
playerTurtles = [] #거북이 2차원 리스트
## 메인 함수 부분 ##
if __name__ == "__main__" :
turtle.title('거북이 리스트 활용')
turtle.shape('turtle')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
shapeList = turtle.getshapes() ## getshapes() : 현재 사용 가능한 모든 거북이 모양의 이름 목록을 반환
for i in range(1, 100) :
random.shuffle(shapeList) ## shuffle(shapeList) : shapeList항목을 섞어놓는 함수
myTurtle = turtle.Turtle(shapeList[0])
tX = random.randrange(-swidth / 2, swidth / 2)
tY = random.randrange(-sheight / 2, sheight / 2)
r = random.random(); g = random.random(); b = random.random()
tSize = random.randrange(1, 3)
playerTurtles.append([myTurtle, tX, tY, tSize, r, g, b]) ## append() : 리스트 맨 뒤에 항목을 추가
for tList in playerTurtles :
myTurtle = tList[0]
myTurtle.color((tList[4],tList[5],tList[6]))
myTurtle.pencolor((tList[4],tList[5],tList[6]))
myTurtle.turtlesize(tList[3])
myTurtle.goto(tList[1], tList[2])
turtle.done()
# 실습1
# 아래 이름들을 names라는 리스트로 만들기
# "Sara", "Chanel", "Mike", "Ryan", "Holy", "Alex", "Rob"
names=["Sara", "Chanel", "Mike", "Ryan", "Holy", "Alex", "Rob"]
names[1]
'Chanel'
# '' 없애기
print(names[-1])
Rob
names[1:4]
['Chanel', 'Mike', 'Ryan']
names=["Sara", "Chanel", "Mike", "Ryan", "Holy", "Alex", "Rob"]
names[-3:]
['Holy', 'Alex', 'Rob']
# aly, sally, peter, aly를 출력
my_list=['Mitch', ['sara','sally','joe'],'peter','aly']
my_list[3]
'aly'
my_list[1][1]
'sally'
my_list[-2:]
['peter', 'aly']
len(my_list)
4
my_list.append('nayoon')
my_list
['Mitch', ['sara', 'sally', 'joe'], 'peter', 'aly', 'nayoon']
# 리스트 제거: del, remove
# del my_list[-3]
my_list.remove('peter')
my_list
['Mitch', ['sara', 'sally', 'joe'], 'aly', 'nayoon']
# mitch 오른쪽에 Mike를 추가하세요
my_list.insert(1,'Mike')
my_list
['Mitch', 'Mike', 'Mike', ['sara', 'sally', 'joe'], 'aly', 'nayoon']
# 실습2
# 오름차순으로 순서 정렬 sorted 사용
my_list=[50,20,30,10,40,15,45]
sorted(my_list)
[10, 15, 20, 30, 40, 45, 50]
# 내림차순 정렬
my_list.sort(reverse=True)
my_list
[50, 45, 40, 30, 20, 15, 10]
# chocolate, potatoes, protein bar를 뽑아내는 코드를 작성하고
# 이들을 리스트로 만듭니다.
grocery_list=[['chips'], 'jelly','chocolate'],['sweet potatoes', 'potatoes'],['peanuts','protein bar']
grocery_list[0][-1]
'chocolate'
grocery_list[1][-1]
'potatoes'
grocery_list[2][-1]
'protein bar'
new_list=[grocery_list[0][-1],grocery_list[1][-1],grocery_list[2][-1]]
new_list
['chocolate', 'potatoes', 'protein bar']
# 또 다른 방법
new_list2=[]
new_list2.append(a)
new_list2.append(b)
new_list2.append(c)
▶ 7주차: 튜플, 딕셔너리
# 튜플
# 리스트는 [], 튜플은 () 로 생성
myTuple=(10,20,30)
myTuple.append(40)
myTuple
# 딕셔너리: 쌍 2개가 하나로 묶인 자료구조
# 딕셔너리변수 = {키1:값1, 키2:값2, 키3:값3}
a={1:'a', 2:'b'}
a
{1: 'a', 2: 'b'}
student={'학번':1000, '이름': '셀리', '학과':'데이터사이언스'}
student
student['연락처']=1001234
student
{'학번': 1000, '이름': '셀리', '학과': '데이터사이언스', '연락처': 1001234}
# 딕셔너리 삭제
del student['학과']
student
{'학번': 1000, '이름': '셀리', '연락처': 1001234}
# 딕셔너리명.get(키) 함수를 사용해 키로 값에 접근
student.get('이름')
'셀리'
# 딕셔너리명.items() -> 튜플 형태로 구할 수 있음
student.items()
dict_items([('학번', 1000), ('이름', '셀리'), ('연락처', 1001234)])
# 해당키 확인 -> in 사용
'이름' in student
True
# for문을 활용해 딕셔너리 모든 값 출력하는 코드
singer= {}
singer['이름']='르세라핌'
singer['구성원 수']=5
singer['데뷔곡']=''
# 키로 정렬한 후 딕셔너리 추출
import operator
trainDic, trainList ={}, [] #빈 딕셔너리와 리스트 준비
trainDic={'Thomas':'토마스', 'Edward':'에드워드', 'Henry':'헨리'} #딕셔너리 작성
trainList=sorted(trainDic.items(), key=operator.itemgetter(0)) # 키를 기준으로 딕셔너리 정렬
print(trainList)
[('Edward', '에드워드'), ('Henry', '헨리'), ('Thomas', '토마스')]
# 궁합이 맞는 음식을 출력하는 프로그램
foods = {"떡볶이" : "오뎅","짜장면" : "단무지","라면" : "김치","피자" : "피클","맥주" : "치킨","치킨" : "치킨무","삼겹살" : "상추" };
while True:
my food = input(str(list(foods.keys())) + "중 좋아하는 것은 ? ") #딕셔너리키 목록 출력
if myfood in foods:
print("<%s> 궁합 음식은 <%s> 입니다." % (myfood, foods.get(myfood)))
elif myfood == "끝" :
break
else:
print('그런 음식 없어요')
# 세트: 키만 모아 놓은 딕셔너리의 특수한 형태
myset1 ={1,2,3,4,5}
myset1
{1, 2, 3, 4, 5}
# 종류만 파악하고 싶을 때 -> 리스트를 set로 바꾸기 // 중복값 제거
sales=['삼각김밥','바나나','삼각김밥','과자','과자','아이스크림']
set(sales)
{'과자', '바나나', '삼각김밥', '아이스크림'}
# 교집합, 합집합, 차집합, 대칭 차집합 구하기
mySet1={1,2,3,4,5}
mySet2={4,5,6,7}
mySet1.intersection(mySet2) #교집합
mySet1&mySet2
mySet1.union(mySet2) #합집합
mySet1.difference(mySet2) #차집합
mySet1.symmetric_difference(mySet2) #대칭 차집합
{1, 2, 3, 6, 7}
# 컴프리헨션(함축) -> 값이 순차적인 리스트를 한줄로 만드는 방법
# 리스트=[수식 for 항목 in range() if 조건식] ★★★
# 1부터 5까지 저장된 리스트
numList=[]
for num in range(1,6):
numList.append(num)
numList
[1, 2, 3, 4, 5]
# 컴프리헨션으로 작성
numList=[num for num in range(1,6)]
numList
[1, 2, 3, 4, 5]
# 1~20 숫자 중에서 3의 배수로만 리스트를 구성
numList=[num for num in range(1,21) if num%3==0]
numList
[3, 6, 9, 12, 15, 18]
# 동시에 여러 리스트에 접근
# zip() 함수를 사용해 동시에 여러 리스트에 접근
foods=['떡볶이','짜장면','라면','피자','맥주','치킨']
sides=['오뎅','단무치','김치']
for food,side in zip(foods,sides):
print(food, '-->', side)
떡볶이 --> 오뎅
짜장면 --> 단무치
라면 --> 김치
# 실습
# 실습1. 두개의 파티에 모두 참석한 사람들의 명단 출력
partyA={'Park','Kim','Lee'}
partyB={'Park','Choi'}
partyA&partyB
{'Park'}
# 실습2. 영한 사전 만들기
# 딕셔너리명.get(키) 함수를 사용해 키로 값에 접근
english_dict=dict()
english_dict['one']='하나'
english_dict['two']='둘'
english_dict['three']='셋'
word=input('단어를 입력하세요: ');
print(english_dict.get(word,'없음'))
단어를 입력하세요: two
둘
# 실습3. 축약어 풀어쓰기
table={'B4':'Before',
'TX':'Thanks',
'BBL':'Be Back Later',
'BCNU':'Be Seeing You',
'HAND':'Have A Nice Day'}
message=input('번역할 문장을 입력하시오: ')
words=message.split()
result=""
for word in words:
if word in table:
result += table[word]+" "
else:
result += word
print(result)
번역할 문장을 입력하시오: TX
Thanks
# 딕셔너리를 활용해 음식 궁합을 출력하는 프로그램
foods={'떡볶이':'오뎅',
'짜장면':'단무지',
'라면':'김치',
'피자':'피클',
'맥주':'땅콩',
'치킨':'치킨무',
'삼겹살':'상추'}
while True:
myfood = input(str(list(foods.keys())) + ' 중 좋아하는 음식은?')
if myfood in foods:
print('<%s> 궁합 음식은 <%s>입니다.' %(myfood, foods.get(myfood)))
elif myfood=="끝":
break
else:
print('그런 음식이 없습니다. 확인해보세요')
['떡볶이', '짜장면', '라면', '피자', '맥주', '치킨', '삼겹살'] 중 좋아하는 음식은?맥주
<맥주> 궁합 음식은 <땅콩>입니다.
['떡볶이', '짜장면', '라면', '피자', '맥주', '치킨', '삼겹살'] 중 좋아하는 음식은?치킨
<치킨> 궁합 음식은 <치킨무>입니다.
- 리스트를 이용한 스택 구현
- 스택: 한 쪽 끝이 막혀 먼저 들어간것이 가장 나중에 나오는 형태의 구조
- 큐: 양쪽이 뚫린 구조. 파이프 같은 모양. 한쪽으로 들어가면 다른 한쪽으로 나오는 형태
#주차장 프로그램 (스택 이용)
parking = []
top, carName, outCar = 0, "A", ""
select = 9
while (select != 3):
select = int(input("<1> 자동차 넣기 <2> 자동차 빼기 <3> 끝 : " ))
if select == 1:
if top >= 5 :
print("주차장이 꽉 차서 못 들어감")
else :
parking.append(carName)
print("%s 자동차가 들어감. 주차장 상태 ==> %s \n" % (parking[top], parking))
top += 1
carName = chr(ord(carName)+1)
elif select == 2 :
if top <= 0 :
print("빠져나갈 자동차가 없음\n")
else :
outCar = parking.pop()
print("%s 자동차가 나감. 주차장 상태 ==> %s \n" % (outCar, parking))
top -= 1
carName = chr(ord(carName)-1)
elif select == 3 :
break
else :
print("잘못 입력했네요. 다시 입력하세요.")
print("현재 주차장에 %d 대가 있음" % top)
print("프로그램을 종료합니다.")
# 주차장 프로그램 (큐 이용)
parking = []
top, carName, outCar = 0, "A", ""
select = 9
rear = 0
while (select != 3):
select = int(input("<1> 자동차 넣기 <2> 자동차 빼기 <3> 끝 : " ))
if select == 1:
if top >= 5 :
print("주차장이 꽉 차서 못 들어감")
else :
parking.append(carName)
print("%s 자동차가 들어감. 주차장 상태 ==> %s \n" % (parking[top], parking))
top += 1
carName = chr(ord(carName)+1)
elif select == 2 :
if top <= 0 :
print("빠져나갈 자동차가 없음\n")
else :
outCar = parking[rear]
del(parking[rear])
print("%s 자동차가 나감. 주차장 상태 ==> %s \n" % (outCar, parking))
top -= 1
elif select == 3 :
break
else :
print("잘못 입력했네요. 다시 입력하세요.")
print("현재 주차장에 %d 대가 있음" % top)
print("프로그램을 종료합니다.")
▶ 9주차: 문자열
ss='파이썬'+'하기싫다'
ss
'파이썬하기싫다'
aa='일요일'*3
aa
aalen=len(aa)
for i in range(0,aalen):
print(ss[i]+'$',end='')
파$이$썬$하$기$싫$다$
# 문자열을 입력받아 반대로 출력
inStr, outStr='','' #변수를 설정(문자열 입력받을 변수, 거꾸로 저장하는 변수)
count,i=0,0 #count는 문자열의 개수를 저장 i는 0,1,2,~~변환
inStr=input('문자열을 입력하세요: ')
count=len(inStr) #문자열의 개수만큼 반복
for i in range(0,count):
outStr += inStr[count-(i+1)]
print('내용을 거꾸로 출력 --> %s' % outStr)
문자열을 입력하세요: 안녕하세용
내용을 거꾸로 출력 --> 용세하녕안
# 대문자와 소문자 변환하기
ss='My name is Sally'
ss.upper()
'MY NAME IS SALLY'
ss='My name is Sally'
ss.lower()
'my name is sally'
ss='My name is Sally'
ss.swapcase()
'mY NAME IS sALLY'
ss='My name is Sally'
ss.title()
'My Name Is Sally'
ab='요즘 돈을 너무 많이 써서 돈이 없어요. 돈 좀 아껴쓰자 제발'
print(ab.find('돈'), ss.rfind('돈'), ss.find('돈',5), ss.find('제발'))
3 -1 -1 -1
ab='요즘 돈을 너무 많이 써서 돈이 없어요. 돈 좀 아껴쓰자 제발'
print(ab.index('돈'), ab.rindex('돈'), ab.index('돈',5))
3 23 15
# 특정 문자열 시작하는 여부
ab='요즘 돈을 너무 많이 써서 돈이 없어요. 돈 좀 아껴쓰자 제발'
print(ab.startswith('요즘'))
True
ab='요즘 돈을 너무 많이 써서 돈이 없어요. 돈 좀 아껴쓰자 제발'
print(ab.startswith('돈'))
False
# 문자열이 괄호로 감싸 있지 않으면 괄호로 감싸주는 프로그램
ss=input('입력 문자열-->')
print('출력 문자열 -->', end='')
if ss.startswith('(') == False:
print('(', end='')
print(ss,end='')
if ss.endswith(')')==False:
print(')', end='')
# 문자열.startwith(str, begin, end)
# str: 검사할 문자열, begin: 검사 시작위치, end:검사 끝위치
입력 문자열-->아니 이게 뭐람
출력 문자열 -->(아니 이게 뭐람)
# 문자열 공백, 삭제, 변경: strip(), rstrip(). lstrip(), replace()
abc=' 이 게 뭐 람 '
abc.rstrip()
' 이 게 뭐 람'
abc=' 이 게 뭐 람 '
abc.lstrip()
'이 게 뭐 람 '
# 문자열 변경: 문자열.replace(이전,바꿀것)
ad='일요일이 너무 좋아~'
ad.replace('일요일','sunday')
'sunday이 너무 좋아~'
# 문자열을 입력받아 그중 0를 &로 변경
ss=input('입력 문자열-->')
print('출력 문자열-->', end='')
for i in range(0,len(ss)):
if ss[i] != '0':
print(ss[i], end='')
else:
print('&', end='')
입력 문자열-->아니 이게 뭐람 00
출력 문자열-->아니 이게 뭐람 &&
# 문자열 분리, 결합 split(), splitlines(), join()
ss='python 열공 중입니다. 어렵다'
ss.split()
ss='하나, 둘, 셋'
ss.split(',')
['하나', ' 둘', ' 셋']
# map(함수명, 리스트)
before=['2023','05','12']
after=list(map(int, before)) #before를 int형으로 다 바꿔라
after
[2023, 5, 12]
- 문자열 정렬, 채우기: center(), ljust(), rjust(), zfill()
- 문자열 구성 파악: isdigit(), isalpha(), isalnum(), islower(), isupper(), isspace()
실습
#커피를 타는 과정의 코드
coffee=0
coffee=int(input('어떤 커피 드릴까요? 1.보통 2. 설탕 3.블랙'))
if coffee==1:
print('종이컵을 준비한다')
elif coffee==2:
print('설탕 커피를 탄다')
elif coffee==3:
print('블랙커피를 탄다')
else:
print('아무거나 탄다')
어떤 커피 드릴까요? 1.보통 2. 설탕 3.블랙3
블랙커피를 탄다
#함수 사용
coffee=0
def coffee_machine(button):
if coffee==1:
print('종이컵을 준비한다')
elif coffee==2:
print('설탕 커피를 탄다')
elif coffee==3:
print('블랙커피를 탄다')
else:
print('아무거나 탄다')
coffee=int(input('어떤 커피 드릴까요? 1.보통 2. 설탕 3.블랙'))
coffee_machine(coffee)
print('손님 커피 드세요.')
어떤 커피 드릴까요? 1.보통 2. 설탕 3.블랙2
설탕 커피를 탄다
손님 커피 드세요.
# 덧셈, 뺄셈, 곱셈, 나눗셈 하는 계산기 함수 작성하기
def calc(v1,v2,op):
result=0
if op=='+':
result=v1+v2
elif op=='-':
resul=v1-v2
elif op=='*':
result=v1*v2
elif op=='/':
result=v1/v2
return result
res=0
var1, var2, oper=0,0,""
oper=input('계산을 입력하세요(+,-,*,/): ')
var1=int(input('첫 번째 수를 입력하세요:'))
var2=int(input('두 번째 수를 입력하세요:'))
res=calc(var1,var2,oper)
print('##계산기: %d %s %d = %d' % (var1, oper, var2, res))
계산을 입력하세요(+,-,*,/): +
첫 번째 수를 입력하세요:2
두 번째 수를 입력하세요:5
##계산기: 2 + 5 = 7
# 로또 추첨
import random
def getNumber():
return random.randrange(1,46)
lotto=[]
num=0
print('** 로또 추첨을 시작합니다. **\n');
while True:
num=getNumber()
if lotto.count(num)==0:
lotto.append(num)
if len(lotto) >= 6:
break
print('추첨된 로또 번호 ==>', end='')
lotto.sort()
for i in range(0,6):
print('%d '%lotto[i], end='')
** 로또 추첨을 시작합니다. **
추첨된 로또 번호 ==>12 17 20 21 26 34
# 예제1. 어떤 숫자를 입력 받아서 짝수인지를 판단해 주는 부분을 함수로 구현
number=int(input('숫자를 입력하세요:'))
if number %2 ==0:
print('입력한 숫자 %d는 짝수입니다.')
else:
print('입력한 숫자 %d는 홀수입니다.')
숫자를 입력하세요:5
입력한 숫자 %d는 홀수입니다.
# 예제2. 두개의 숫자를 입력 받아서 숫자의 합을 리턴하는 프로그램 작성
print('숫자 2개를 입력하시오')
a=int(input())
b=int(input())
c=a+b
print(c)
숫자 2개를 입력하시오
2
3
5
# 함수 선언 부분
def plus(v1,v2):
result=0
result=v1+v2
return result
hap=0
hap=plus(100,200)
print('100과 200의 plus() 함수 결과는 %d' %hap)
100과 200의 plus() 함수 결과는 300
# 예제3. 문자와 숫자가 섞여있는 데이터가 있을 때 숫자를 기준으로 데이터를 정렬하는 프로그램 만들기
# A37B, 23CC, 88D9, BB8F, 3A9A의 값 5개를 정렬한다. 이 값들에서 문자는 무시하고 숫자만 취급하여 37,
# 23, 889, 8, 39를 정렬하시오. (정렬 방법은 그림과 같음)
import random
def getNumber(strData):
numStr=''
for ch in strData:
if ch.isdigit():
numStr += ch
return int(numStr)
data=[]
i,k=0,0
if __name__=="__main__":
for i in range(0,10):
tmp=hex(random.randrange(0,100000))
tmp=tmp[2:]
data.append(tmp)
print('정렬 전 데이터: ', end='')
[print(num,end='') for num in data]
for i in range(0,len(data)-1):
for k in range(i+1, len(data)):
if getNumber(data[i]) > getNumber(data[k]):
tmp=data[i]
data[i]=data[k]
data[k]=tmp
print('\n 정렬 후 데이터: ', end='')
[print(num,end='') for num in data]
정렬 전 데이터: 13a55b97be15bac3755bd8bd7845a1333dd24f14e54
정렬 후 데이터: e15bd24fac3755bd8bd7b97b845a1333d13a5514e54
# 번외
data = ['A37B', '23CC', '88D9', 'BB8F', '3A9A']
nums = []
def sortby_num():
# 숫자만 추출하여 리스트에 저장
for d in data:
num = ''.join(filter(str.isdigit, d))
nums.append(int(num))
print(nums)
# 추출된 숫자를 기준으로 정렬
sorted_data = [d for _, d in sorted(zip(nums, data))]
print(sorted_data)
sortby_num()
[37]
[37, 23]
[37, 23, 889]
[37, 23, 889, 8]
[37, 23, 889, 8, 39]
['BB8F', '23CC', 'A37B', '3A9A', '88D9']
▶ 11주차: 함수와 모듈
# 거북이 글자쓰기
import random
from tkinter.simpledialog import *
def getString() :
retStr = ''
retStr = askstring('문자열 입력', '거북이 쓸 문자열 입력')
return retStr
def getRGB() :
r, g, b = 0, 0, 0
r = random.random()
g = random.random()
b = random.random()
return(r, g, b)
def getXYAS(sw, sh) :
x, y, angle, size = 0, 0, 0, 0
x = random.randrange(-sw / 2, sw / 2)
y = random.randrange(-sh / 2, sh / 2)
angle = random.randrange(0, 360)
size = random.randrange(10, 50)
return [x, y, angle, size]
from myTurtle import * # myTurtle 모듈을 임포트
import turtle
## 전역 변수 선언 부분 ##
inStr = ''
swidth, sheight = 300, 300
tX, tY, tAngle, tSize = [0] * 4
## 메인 코드 부분 ##
turtle.title('거북이 글자쓰기(모듈버전)')
turtle.shape('turtle')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
turtle.penup()
turtle.speed(5)
inStr = getString()
for ch in inStr :
tX, tY, tAngle, tSize = getXYAS(swidth, sheight)
r, g, b = getRGB()
turtle.goto(tX, tY)
turtle.left(tAngle)
turtle.pencolor((r, g, b))
turtle.write(ch, font=('맑은 고딕', tSize, 'bold'))
turtle.done()
# 리스트에 모두 10을 더하는 코드
myList = [1,2,3,4,5]
def add10(num):
return num+10
for i in range(len(myList)):
myList[i]=add10(myList[i])
print(myList)
[11, 12, 13, 14, 15]
# 위를 람다함수와 map 함수로 간단히 표현하기
myList = [1,2,3,4,5]
add10 = lambda num : num+10
myList = list(map(add10,myList)) #map(함수명, 리스트)
print(myList)
[11, 12, 13, 14, 15]
# 2+3행을 합친 코드
myList = [1,2,3,4,5]
myList = list(map(lambda num: num+10, myList))
print(myList)
[11, 12, 13, 14, 15]
# 두 리스트의 각 자릿수를 합쳐 새로운 리스트 만들기
list1 =[1,2,3,4]
list2 = [10,20,30,40]
hapList = list(map(lambda n1,n2: n1 + n2, list1, list2))
print(hapList)
[11, 22, 33, 44]
▶ 12주차: 파일 입출력
# 텍스트 파일 입출력
# 변수 선언
inFp, outFp = None, None
inStr, outStr ='',''
i=0
secu = 0
# 메인 코드
secuYN = input('1. 암호화 2. 암호 해석 중 선택: ')
inFname = input('입력 파일명을 입력하세요: ')
outFname = input('출력 파일명을 입력하세요: ')
# secu 변수값이 암호화할 때는 100으로 설정, 암호 해독시에는 -100으로 설정
if secuYN =='1':
secu=100
elif secuYN == '2':
secu =- 100
inFp = open(inFname, 'r', encoding='utf-8')
outFp = open(inFname, 'w', encoding='utf-8')
# 입력 파일의 끝까지 읽으면서 무한 반복
while True:
inStr = inFp.readline()
if not inStr:
break
outStr = '' #한 행을 암호화한 결과를 저장하는 변수
for i in range(0, len(inStr)):
ch = inStr[i]
chNum = ord(ch)
chNum = chNum + secu
ch2 = chr(chNum)
outStr = outStr + ch2
outFp.write(outStr)
outFp.close()
inFp.close()
print('%s --> %s 변환 완료' %(inFname, outFname))
# 이진 파일 입출력
from tkinter import*
window = None
canvas = None
XSIZE, YSIZE = 256, 256 #캔버스 크기 지정
window = Tk() #윈도우 창 준비
canvas = Canvas(window, height = XSIZE, width = YSIZE) #윈도우 창에 캔버스 부착
canvas.pack()
window.mainloop()
paper = PhotoImage(width=XSIZE, height=YSIZE)
canvas.create_image((XSIZE/2, YSIZE/2), image=paper, state='normal')
for i in range(0,XSIZE):
tmpList = [] #tmplist를 비움
for k in range(0,YSIZE):
data=int(ord(fp.read(1)))
tmpList.append(data)
inImage.append(tmpList)
rgbstring=''
for i in range(0,XSIZE):
tmpString =''
for k in range(0, YSIZE):
data=image[i][k]
tmpString += '#%02x%02x%02x'%(data,data,data)
rgbString += '{' + tmpString +'}'
paper.put(rgbString)
# 이진 파일 입출력
from tkinter import*
def loadImage(fname):
global inImage,XSIZE,YSIZE
fp=open(fname,'rb')
for i in range(0,XSIZE):
tmpList=[]
for k in range(0,YSIZE):
data = int(ord(fp.read(1)))
tmpList.append(data)
inImage.append(tmplist)
fp.close()
def displayImage(image):
global XSIZE,YSIZE
rgbString=''
for i in range(0,XSIZE):
tmpString=''
for k in range(0,YSIZE):
data=image[i][k]
tmpString += '#%02x%02x%02x' %(data,data,data)
rgbString += '{'+tmpString+'}'
paper.put(rgbString)
window=None
canvas=None
XSIZE,YSIZE=256,256
inImage=[]
window=Tk()
window.title('흑백 사진 보기')
canvas=Canvas(window,height=XSIZE,width=YSIZE)
paper=PhotoImage(width=XSIZE, height=YSIZE)
canvas.create_image((XSIZE/2, YSIZE/2),image=paper, state='normal')
filename = 'RAW/tree.raw' #파일명 지정
loadImage(filename) #loadimage 함수에 파일명 전달해 해당 파일을 inimage리스트에 불러들임
displayImage(inImage)
canvas.pack()
window.mainloop()
# 상위 폴더 옮기기
from tkinter import *
import os
import os.path
##함수 선언 부분##
def clickListBox(evt) :
global currentDir, searchDirList
if (dirListBox.curselection() == ()): # 다른 리스트 박스 클릭할 때 무시
return
dirName = str(dirListBox.get(dirListBox.curselection()))
if dirName == '상위폴더' :
if len(searchDirList) == 1 : ## 상위폴더 클릭, 현재 C:\\이면 무시
return
searchDirList.pop() # 상위 폴더 이동이라 마지막 검색 폴더 (현재 폴더)
else :
searchDirList.append(currentDir + dirName + '\\') # 검색 리스트에 클릭한 폴더 추가
fillListBox()
def fillListBox() :
global currentDir, searchDirList, dirLabel, dirListBox, fileListBox
dirListBox.delete(0, END)
fileListBox.delete(0,END)
dirListBox.insert(END, "상위폴더")
currentDir = searchDirList[len(searchDirList) -1]
dirLabel.configure(text = currentDir)
folderList = os.listdir(currentDir)
for item in folderList :
if os.path.isdir(currentDir + item) :
dirListBox.insert(END, item)
elif os.path.isfile(currentDir + item) :
fileListBox.insert(END, item)
## 전역 변수 선언 부분
window = None
searchDirList = ['C:\\']
currDir = 'C:\\'
dirLabel, dirListBox, fileListBox = None, None, None
# 메인 코드 부분
window = Tk()
window.title("폴더 및 파일 목록 보기")
window.geometry('300x500')
dirLabel = Label(window, text = currDir)
dirLabel.pack()
dirListBox = Listbox(window)
dirListBox.pack(side = LEFT, fill = BOTH, expand = 1)
dirListBox.bind('<<ListboxSelect>>', clickListBox)
fileListBox = Listbox(window)
fileListBox.pack(side = RIGHT, fill = BOTH, expand =1)
fillListBox()
window.mainloop()

▶ 13주차:
'Data Analysis > Python Basic' 카테고리의 다른 글
[파이썬] 거북이 글자쓰기 (0) | 2023.06.03 |
---|---|
[파이썬] 자동차 클래스를 파이썬 코드로 생성 (0) | 2023.06.03 |
[파이썬] 파일 입출력의 기본 (0) | 2023.05.20 |
[파이썬] 문자열 기초 코드 (0) | 2023.05.07 |
[파이썬] 함수 기본 (0) | 2023.05.07 |