2022. 9. 27. 14:55ㆍ카테고리 없음
소프트웨어프로젝트2 수업 복습.
빠르게 복습 가보자고.
근데 참고로 안돌려보고 바로 올리는거라 오타가 있을지도. 안돌아갈지도.
임시저장 갈기면서 열심히 타이핑 해보겠음~~
검색어 걸려서 방문자수 1000 돌파하면 좋겟다
[피보나치 수열 Fibonacci Sequence O(n)]
def Fibo(n):
pp = 0
p = 1
result = 0
for i in range(2, n+1):
result = p + pp
pp = p
p = result
return result
n = int(input('n: '))
print("Fibo(%d) : %d" %(n, Fibo(n)))
원래 이걸 재귀로 코드 짰었음. 그건 O(n^2) 이라 돌아가는데 시간 오래걸림.
하지만 이건? O(n)임.
[피보나치 수열 재귀적 구현 Recursive Fibonacci Sequence O(n^2)]
def rFibo(n):
if n == 0:
return 0
elif n==1:
return 1
else:
return rFibo(n-1) + fibo(n+2)
n = int(input('n: '))
print("Fibo(%d) : %d" %(n, rFibo(n)))
짠 이게 문제의 코드. 재귀로 짬.
간단하게 생겼는데 n이 커질수록 함수를 계속 불러서 n^2 이나 걸림!!!
[선형 탐색 Linear Search]
import random
def makeList(n):
list = []
for i in range(n):
list.append(random.randint(1, 100))
return list
def linearSearch(list, key):
size = len(list)
for i in range(size):
if(list[i] == key):
return i
return -1
n = int(input('n: '))
list = makeList(n)
print(list)
key = int(input('key: '))
idx = linearSearch(list, key)
if(idx == -1):
print("No Exist")
else:
print("In %d index" %idx)
일단 랜덤으로 숫자 1~100 사이의 숫자가 리스트에 들어감 100이하임 100미만이 아님!!!
아니 파이썬 왜이럼? range랑은 또 다르잔아 좀 통일해라 please 근데 다 이유가 잇겟지?ㅎㅎ;;
그리고 리스트안을 인덱스 0부터 돌면서 키값이랑 같은게 나오면 인덱스값 리턴!
바로 빠져나옴! 아니면 -1 리턴
근데 수업 들을때 저렇게 짜면 if 결과랑 상관없이 return -1 이 무조건 걸리는줄.. 이제 최지원한테 물어보고 올거임 ㄱㄷ
???: 맞다.
고 함 키값이랑 같은거 찾으면 for문 밖으로 빠져나간다고 함~~
[이진 탐색 Binary Search]
def makeList(n):
list = []
for i in range(n):
list.append(random.randint(1, 100))
return list
def binarySearch(list, key):
low = 0
high = len(list) - 1
while(low <= high):
mid = (low + high) // 2
if(list[mid] == key):
return mid
elif(list[mid] < key):
low = mid + 1
else:
high = mid - 1
return -1
n = int(input('n: '))
list = makeList(n)
list = sorted(list)
print(list)
key = int(input('key: '))
idx = binarySearch(list, key)
if(idx == -1):
print("No Exist")
else:
print("In %d index" %idx)
일단 위에랑 makeList 함수 부분은 똑같음.
하지만? 혹시라도 만에 하나 나의 블로그를 보고 누군가가 코드를 참고한다면???
이 부분만 보고 복붙할 수도 있으니 친절하게 다 적어줌
어쨌든 이진탐색은 사전처럼 반씩 쪼개고 아닌부분 쳐내고 반 쪼개고 반 쪼개다가 앗 찾았다~~!~! 하는 것
그래서 low랑 high라는 변수를 쓴다 두개 평균내서 중간부분을 찾는거임
설명은 귀찮으니 여기까지만 적어야징.
[이진 탐색 Recursive Binary Search]
def recurBinarySearch(list, low, high, key):
if(low <= high):
mid = (low + high) // 2
if(list[mid] == key):
return mid
elif(list[mid] < key):
return recurBinarySearch(list, mid+1, high ,key)
else:
return recurBinarySearch(list, low, mid-1, key)
return -1
이번에도 makeList 필요한데 걍 내가 보기 힘들어서 뺌.
이건~ 재귀적으로 구현한건데 사실 교수님이 재귀로 구현해보세요 햇을때 땀 삐질흘리면서 가만히잇었음
재귀 넘 어렵잔아???ㅠ 근데 듣고나면 쉬움
if문 안에서 low 와 high의 값만 바뀌면 되니까
return 자기자신(low값 바꾸기)
return 자기자신(high값 바꾸기)
이렇게 해주면 되겟음
아 참고로
idx = recurBinarySearch(list, 0, n-1, key)
복붙할때 idx는 이렇게 써줘야된다. argument(인수) 가 두개 더 들어감!!
이거 인수 맞지 지원아?? 맞대요 여러분.
[PyQt5]
import sys
from PyQt5.QtWidgets import *
app = QApplication(sys.argv)
# label = QLabel("Hello, world")
# label.show()
print(sys.argv)
label = QPushButton("Quit")
label.show()
app.exec_()
이건~~ 창이 뜨는 코드ㅎ
PyQt5
근데 잘 모름 교수님 설명할때 나혼자만 창이 안떠서 교수님 설명 못들엇거든
근데 개작아;;서 뜬줄도 모름 그래서 엥 내 코드 틀렸나??? 하면서 보는데 코딱지만한 화면 발견~⭐️
그래서 이게 뭔데?? 보시면 님들이 설명좀요..
[PyQt5??인가]
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("SWP2")
self.setGeometry(300, 300, 300, 400)
if __name__ == "__main__":
app = QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
이건 창을 예쁘게 키운 코드임.
사실 잘 모르는데 아무튼 그런거임.
[이건 먼 코드지?]
class Parent:
house = "yong-san"
def __init__(self):
self.money = 10000 # 인스턴스 변수
class Child1(Parent):
def __init__(self):
super().__init__()
pass
class Child2(Parent):
def __init__(self):
pass
child1 = Child1()
child2 = Child2()
print('Child1', dir(child1))
print('Child2', dir(child2))
[실행 결과]
Child1 ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'house', 'money']
Child2 ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'house']
이게 뭐지?? 잘모르겟음... 근데 이렇게 블로그 성의없이 써도 댐?
[Person 클래스]
class Person:
def __init__(self, name, job, pay):
self.name = name
self.job = job
self.pay = pay
>>> from 파일명.py import Person
>>> p = Person('James', 'Developer', 100)
이것도 내가 해맴 근데 교수님이 from person import Person 이길래 따라쳣는데 안되는거임
근데 person 이 person.py..... 파일명이엇던거임
제발 그런건 설명해주시라구요 교수님 3학년 울어.
[Person 클래스 default값 넣어주기]
class Person:
def __init__(self, name, job = None, pay = 0):
self.name = name
self.job = job
self.pay = pay
if __name__ == '__main__': # 실행 주체가 ~~
bob = Person('Bob Smith')
sue = Person('Sue Jones', job='dev', pay=100000)
print(bob.name, bob.pay)
print(sue.name, sue.pay)
else:
print("hello")
저 이 코드는 대체 머죠?..
if __name__ == '__main__':
해당 모듈이 임포트된 경우가 아니라 인터프리터에서 직접 실행된 경우에만,
if문 이하의 코드를 돌리라는 명령입니다.
라고 멋진 블로거님이 말씀해주심!!~
굿
class Person:
def __init__(self, name, job = None, pay = 0):
self.name = name
self.job = job
self.pay = pay
def lastName(self):
return self.name.split()[-1]
def giveRaise(self, percent):
self.pay = int(self.pay * (1 + percent))
if __name__=='__main__':
bob = Person('Bob Smith')
sue = Person('Sue Jones', job='dev', pay=1000000)
print(bob)
print(sue)
print(bob.lastName(), sue.lastName())
sue.giveRaise(1) # 하나만 넣어준다!
print(sue.pay)
음~~~~~~~~~~~~~
머지?
머지는 합병입니다.
잘모르겟어요. 교수님제송해요.
<__main__.Person object at 0x7fa7f004bdc0>
<__main__.Person object at 0x7fa7f004bd60>
Smith Jones
2000000
이렇게 나옴ㅎ
아무튼 이렇게 1주차 모각코를 완료해보았어요.
블로그 이렇게 하는거 맞나요?