Python - 03

월요일좋아·2022년 11월 28일
0

Python

목록 보기
3/8

ch07

ex5

# 2차원 리스트 (다차원 리스트)
aa = [[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]

for i in range(0, 3):
  for j in range(0, 3):
    print(aa[i][j], end=" ")
  print()

list1 = []
list2 = []
value = 1
for i in range(0, 3):
  for j in range(0, 4):
    list1.append(value)
    value += 1
  list2.append(list1)  # 1차 for문 : [[1, 2, 3, 4]]
  list1 = []
print(list2)  # [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

for i in range(0, 3):
  for j in range(0, 4):
    print("%3d" % list2[i][j], end=" ")
  print()

ex6

# 튜플

tt1 = (10, 20, 30, 40)
print(tt1[0])
print(tt1[1])
print(tt1[2])
print(tt1[3])

print(tt1[1:3])
print(tt1[1:])
print(tt1[:3])

# 튜플끼리 더할 수도 있음
tt2 = ('A', 'B')
print(tt1 + tt2)

tt3 = ((1, 2, 3),
       (4, 5, 6),
       (7, 8, 9))
for i in tt3:
  print(i)

print()

# 튜플 -> 리스트
myTuple = (10, 20, 30)
myList = list(myTuple)
myList.append(40)
for i in myList:
  print(i)  # 10 20 30 40

print()

myTuple = tuple(myList)
for i in myTuple:
  print(i)  # 10 20 30 40

ex7

# 딕셔너리 : key와 value 쌍으로 구성, {키 : 값}

dic1 = {1 : 'a', 2 : 'b', 3 : 'c'}
print(dic1[1])  # a
print(dic1[2])  # b
print(dic1[3])  # c

student1 = {'학번' : 1000, '이름' : '홍길동', '학과' : '컴퓨터학과'} # 키와 값의 타입은 일치하지 않아도 됨
print(student1)
# 딕셔너리에 값 추가
student1['연락처'] = '010-1234-5678' # {'학번': 1000, '이름': '홍길동', '학과': '컴퓨터학과'}
print(student1) # {'학번': 1000, '이름': '홍길동', '학과': '컴퓨터학과', '연락처': '010-1234-5678'}

# 딕셔너리의 값 수정
student1['학과'] = '파이썬학과'
print(student1) # {'학번': 1000, '이름': '홍길동', '학과': '파이썬학과', '연락처': '010-1234-5678'}
del(student1['학과'])
print(student1) # {'학번': 1000, '이름': '홍길동', '연락처': '010-1234-5678'}


print(student1.get('학번')) # 1000
print(student1.get('학과')) # None : del(~)로 삭제했으므로 데이터 없음
print(student1.keys()) # 키만 리턴 / dict_keys(['학번', '이름', '연락처'])

ex8

# 딕셔너리

singer = {}
singer['이름'] = '트와이스'
singer['구성원수'] = 9
singer['데뷰'] = '서바이벌 식스틴'
singer['대표곡'] = 'SIGNAL'

for k in singer.keys():
  print('%s --> %s' % (k, singer[k]))

ex9

import operator

# 정렬 (sorting)
trainDic, trainList = {}, []

trainDic = {'Thomas': '토마스', 'Edward': '에드워드', 'Henry': '헨리', 'Gothen': '고든', 'James': '제임스'}
print(trainDic)

# 리스트로 변환시켜서 sorting
trainList = sorted(trainDic.items(), key=operator.itemgetter(0))  # 키 기준으로 정렬 (영어)
print(trainList)
trainList = sorted(trainDic.items(), key=operator.itemgetter(1))  # 값 기준으로 정렬 (한글)
print(trainList)

print('------------------------------------------------------------------------------------------------------------------')
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('그런 음식이 없습니다. 확인해 보세요.')

ex10

import turtle
import random

# 전역변수 선언
myTurtle, tx, ty, tColor, tSize, tShape = [None] * 6
# print(myTurtle) # None
shapeList = []
playerTurtle = []
sWidth, sHeight = 500, 500

# 메인 코드
if __name__ == '__main__':
  turtle.title('거북 리스트 활용')
  turtle.setup(width=sWidth + 50, height=sHeight + 50)
  turtle.screensize(sWidth, sHeight)

  shapeList = turtle.getshapes()
  # print(shapeList)
  for i in range(1, 100):
    random.shuffle(shapeList)
    myTurtle = turtle.Turtle(shapeList[0])
    # 파이썬은 화면의 정 중앙이 (0,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)
    playerTurtle.append([myTurtle, tx, ty, tSize, r, g, b]) # 100번 돌면서 100개의 리스트가 만들어짐


  # print(playerTurtle)
  for tList in playerTurtle:
    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()

ch08

ex1


ss = '파이썬짱'
sslen = len(ss)

for i in range(0, sslen):
print(ss[i] + '$', end="")  # 파$이$썬$짱$

inStr, outStr = ", "
count, i = 0, 0
inStr = input('\n문자열을 입력하세요 : ')
count = len(inStr)

for i in range(0, count):
outStr += inStr[count - (i + 1)]

print('내용을 거꾸로 출력 --> %s' % outStr)

ex2

"""
  파일명 : ex2.py
  개발자 : Gwak
"""

ss = input('입력 문자열 ==> ')
print('출력 문자열 ==> ', end="")

if ss.startswith('(') == False:
  print('(', end="" ) # 첫 글자가 ( 로 시작하지 않으면 False가 아니므로 if문 false -> ( 추가

print(ss, end="")

if ss.endswith(')') == False:
  print(')', end="" ) # 끝 글자가 ) 로 끝나지 않으면 False가 아니므로 if문 false -> ) 추가


inStr = '    한글 Python 프로그래밍    '
# inStr에 공백문자를 제거하고 리턴
outStr = ""
#
# i = 0
#
# for i in range(0, len(inStr)):
#   if inStr[i] == " ":
#     continue
#   elif inStr[i] != " ":
#     outStr += inStr[i]
#
# print("원래 문자열 ==> " + '[' + inStr + ']')
# print("공백 삭제 문자열 ==> " + '[' + outStr + ']')

############################################################################

for i in range(0, len(inStr)):
  if inStr[i] != ' ':
    outStr += inStr[i]

print("원래 문자열 ==> " + '[' + inStr + ']')
print("공백 삭제 문자열 ==> " + '[' + outStr + ']')

inStr = 'Live as if you will die today'

print(inStr.replace('i', '$'))

ex3

"""
  filename : ex3.py
  author : Gwak
  date : 2022. 11. 28
"""

ss = input('날짜(연/월/일) 입력 ==> ')
ssList = ss.split('/')

print('입력한 날짜의 10년 후 ==> ', end="")
print(str(int(ssList[0]) + 10) + '년 ', end="")
print(ssList[1] + '월 ', end="")
print(ssList[2] + '일', end="")

ex4

"""
  title : 거북 글자 쓰기
  filename : ex4.py
  author : Gwak
  date : 22.11.28
"""

# 거북 글자 쓰기
import math
import turtle
import random
from tkinter.simpledialog import *

# 전역변수 선언
inStr = ''
sWidth, sHeight = 500, 500
tx, ty, tSize = [0] * 3

turtle.title('거북 글자 쓰기')
turtle.shape('turtle')
turtle.setup(width=sWidth + 50, height=sHeight + 50)
turtle.screensize(sWidth, sHeight)
turtle.penup()

inStr = askstring('문자열 입력', '거북이 쓸 문자열 입력')
value = 10
angle = 10
dist = 10
for ch in inStr:
  rad = 3.141592 * angle / 180
  tX = dist * math.cos(rad)
  tY = dist * math.sin(rad)
  dist -= 200 / len(inStr)
  angle += value

  r = random.random()
  g = random.random()
  b = random.random()


  turtle.goto(tX, tY)
  turtle.pencolor((r, g, b))
  turtle.write(ch, font=('맑은고딕', 20, 'bold'))

turtle.done()

ex5

"""
  title : 거북 글자 쓰기
  filename : ex4.py
  author : Gwak
  date : 22.11.28
"""

# 거북 글자 쓰기
import math
import turtle
import random
from tkinter.simpledialog import *

# 전역변수 선언
inStr = ''
sWidth, sHeight = 500, 500
tx, ty, tSize = [0] * 3

turtle.title('나선 모양의 거북 글자 쓰기')
turtle.shape('turtle')
turtle.setup(width=sWidth + 50, height=sHeight + 50)
turtle.screensize(sWidth, sHeight)
turtle.penup()

inStr = askstring('문자열 입력', '거북이 쓸 문자열 입력')

dist = 200
angle = 0
value = int(360 * 4 / len(inStr))
for ch in inStr:
  rad = 3.141592 * angle / 180
  tX = dist * math.cos(rad)
  tY = dist * math.sin(rad)
  dist -= 200 / len(inStr)
  angle += value

  r = random.random()
  g = random.random()
  b = random.random()

  turtle.goto(tX, tY)
  turtle.pencolor((r, g, b))
  turtle.write(ch, font=('맑은고딕', 20, 'bold'))

turtle.done()

파이썬에는 pakage의 개념이 없음 -> 모듈

ch09

ex1

# ex1.py
# tkinter : 파이썬에서 윈도우를 담당하는 모듈

from tkinter import *

window = Tk()  # 클래스
window.title('윈도우 창 연습')
window.geometry('400x100') # 창 크기
# window.resizable(width=False, height=FALSE)

label1 = Label(window, text='COOKBOOK~~Python을')
label2 = Label(window, text='열심히', font=('궁서체', 30), fg='blue')
# anchor : 지정한 위치값(NEWS)
label3 = Label(window, text='공부 중입니다.', bg='magenta', width=20, height=5, anchor=CENTER,)

label1.pack()
label2.pack()
label3.pack()

window.mainloop()

ex2

# ex2.py

def plus(v1, v2):
  result = v1 + v2
  return result

hap = 0

hap = plus(100, 200)
print('100과 200 의 plus함수 결과는 %d', hap)

def calc(v1, v2, op):
  result = 0

  if op == '+':
    result = v1 + v2

  elif op == '-':
    result = 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))

ex3

# ex3

def func1():
  a = 10
  print('func1()에서 a값 %d' % a)

def func2():
  print('func1()에서 a값 %d' % a)

a = 20 # 전역변수
func1()
func2()

def func3():
  global b  # 전역변수
  b = 20
  print('func3()에서 b값 %d' % b)

def func4():
  print('func3()에서 b값 %d' % b)

func3()
func4()

ex4

# ex4.py

def multi(v1, v2):
  reList = []
  res1 = v1 + v2
  res2 = v1 - v2
  reList.append(res1)
  reList.append(res2)
  return reList

myList = []
hap, sub = 0, 0

myList = multi(100, 200)
hap = myList[0]
sub = myList[1]
print('multi()에서 돌려준 값 ==> %d, %d' % (hap, sub))

def para_func(v1, v2, v3 = 0):
  result = 0
  result = v1 + v2 + v3
  return result

hap = 0
hap = para_func(10, 20)
print('매개변수 2개의 계산결과 ==> %d' % hap)
hap = para_func(10, 20, 30)
print('매개변수 3개의 계산결과 ==> %d' % hap)

ex5

# ex5

def para_func(*para):  # (*인수) : 가변인수와 유사한 개념
  result = 0
  for num in para:
    result += num
  return result


hap = para_func(10, 20)
print('%d' % hap)
hap = para_func(10, 20, 30)
print('%d' % hap)
hap = para_func(10, 20, 30, 40)
print('%d' % hap)

ex6

# ex6
import random

def getNumber():
  return random.randrange(1, 46)  # 1 ~ 45 범위

lotto = []
num = 0

print('*** 로또 추첨을 시작합니다. ***')

while True:
  num = getNumber()
  if lotto.count(num) == 0: # count가 0 : 리스트 내에 번호가 없다.
    lotto.append(num)
  elif len(lotto) >= 6:
    break

print('추첨된 로또 번호 ==> ', end="")
lotto.sort() # 간단하게 정렬
for i in range(0, 6):
  print('%d' % lotto[i], end=", ")

Module1

## 함수 선언 부분 ##
def func1() :
    print("Module1.py의 func1()이 호출됨.")

def func2() :
    print("Module1.py의 func2()가 호출됨.")

def func3() :
    print("Module1.py의 func3()이 호출됨.")

ex7

# ex7.py
# 모듈 import
from Module1 import *

func1()
func2()
func3()

myTurtle

# myTurtle.py

import random
from tkinter.simpledialog import *

def getString():
  resStr = ''
  resStr = askstring('문자열 입력', '거북이 쓸 문자열 입력')
  return resStr


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
  x, t, 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(0, 50)
  return [x, y, angle, size]

ex8

from myTurtle import *
import turtle

# 전역변수 선언
inStr = ''
sWidth, sHeight = 300, 300
tx, ty, tAngle, txtSize = [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, txtSize = getXYAS(sWidth, sHeight)
  r, g, b = getRGB()

  turtle.goto(tx, ty)
  turtle.left(tAngle)
  turtle.pencolor((r, g, b))
  turtle.write(ch, font=('맑은고딕', txtSize, 'bold'))

ex9

# ex9.py
import sys

print(sys.builtin_module_names)

import math
print(dir(math)) # math 내부의 함수 리턴

ch10

ex1

# ex1.py
# tkinter : 파이썬에서 윈도우를 담당하는 모듈

from tkinter import *

window = Tk()  # 클래스
window.title('윈도우 창 연습')
window.geometry('400x100') # 창 크기
# window.resizable(width=False, height=FALSE)

label1 = Label(window, text='COOKBOOK~~Python을')
label2 = Label(window, text='열심히', font=('궁서체', 30), fg='blue')
# anchor : 지정한 위치값(NEWS)
label3 = Label(window, text='공부 중입니다.', bg='magenta', width=20, height=5, anchor=CENTER,)

label1.pack()
label2.pack()
label3.pack()

window.mainloop()

ex2

# ex2.py
from tkinter import *

window = Tk()

photo1 = PhotoImage(file='GIF/dog2.gif') # 클래스. 대문자로 시작되는것은 모두 클래스
photo2 = PhotoImage(file='GIF/dog3.gif')

label1 = Label(window, image=photo1)
label2 = Label(window, image=photo2)

label1.pack()
label2.pack()

window.mainloop()

ex3

from tkinter import *

window = Tk()
window.geometry('400x400') # 창 크기
button1 = Button(window, text='파이썬 종료', fg='red', command=quit)

button1.pack()

window.mainloop()

ex4

from tkinter import *
from tkinter import messagebox

def myFunc():
  messagebox.showinfo('강아지 버튼', '강아지가 귀엽죠?^^')

window = Tk()

photo = PhotoImage(file='gif/dog5.gif')
button1 = Button(window, image=photo, command=myFunc)

button1.pack()

window.mainloop()

0개의 댓글