TIL_230823

Sol Lee·2023년 9월 19일
0

오늘 한 일

파이썬 개인 과제 -3. 클래스 사용

# 1. 클래스 생성
class Member():
    # 2. Member 클래스 속성
    def __init__(self, name, username, password):
        self.name = name
        self.username = username
        self.password = password

    # 3. Member 클래스 메소드
    def display(self):
        print(f'이름: {self.name}, 아이디: {self.username}')


class Post():
    # 4. Post 클래스 속성
    def __init__(self, title, content, author):
        self.title = title
        self.content = content
        self.author = author


members = []
posts = []

# 5. 회원 인스턴트 생성 및 저장
m1 = Member('솔','sol','sol727')
m2 = Member('오레오','oreo','oreo0124')
m3 = Member('쿨피스','piece','password')

members.append(m1)
members.append(m2)
members.append(m3)

# 5-a. 회원 이름 출력
for member in members:
    print(member.name)

    # 6. 회원당 개시글 3개 작성 후 인스턴스 저장
    p1 = Post(f'내 이름은 {member.name}', '백수죠.', member.name)
    p2 = Post('지금 시간은', '아무튼 새벽임', member.name)
    p3 = Post('내 아이디는', member.username, member.name)
    posts.append(p1)
    posts.append(p2)
    posts.append(p3)

# 6-a. 특정 유저의 게시글 전부 제목 프린트
for post in posts:
    if post.author == '오레오':
        print(post.title)

# 6-b. contents에 특정 단어가 포함된 게시글 전부 제목 프린트
for post in posts:
    dead = post.content.find('백수')
    if dead != -1:
        print(post.title)


# 추가 도전 과제 - 1
make_member = input('회원정보를 생성하시겠습니까? Yes/No ')

if make_member in ['Yes','yes','YES']:
    name = input('이름: ')
    username = input('아이디: ')
    password = input('비밀번호: ')

    member = Member(name, username, password)
    members.append(member)

# 추가 도전 과제 - 2
while True:

    print('게시글 작성하기')

    title = input('제목: ')
    content = input('내용: ')
    author = member.username

    post = Post(title, content, author)
    posts.append(post)
    print('작성한 내용 확인')
    print(f'제목: {post.title}')
    print(f'작성자: {post.author}')
    print(f'내용: {post.content}')

    check = input('게시글을 더 작성하시겠습니까? yes/no ')
    if check in ['Yes', 'yes', 'YES']:
        continue
    else:
        break

파이썬 개인 과제 해설 강의 듣기

## 과제 1

# 내 코드 길이가 2배 정도 길었다.
# 나는 함수를 생성해서 호출하는 방식으로 생성
# 설명해주신 튜터님은 while문으로 전부 생성

## 코드 작성 순서

# 1. 먼저 랜덤 숫자를 형성하고 정답인지 확인하는 코드 작성
answer_number = random.randint(1, 100)
my_guess = int(input("1~100사이의 숫자를 입력해주세요!"))
if answer_number == my_guess:
	print("정답입니다!")
elif answer_number < my_guess:
	print("더 작은수가 답입니다! down!")
else:
	print("더 큰수가 답입니다! UP!!!")

# 2. while 문으로 반복하고 정답일 경우 while문 종료하고 정답 맞춘 횟수를 표시하는 코드 작성 
answer_number = random.randint(1, 100)
count = 0
while True: ...

		my_guess = int(input("1~100사이의 숫자를 입력해주세요!"))
        count = count + 1
        print(f"{count}번째 시도입니다!")
        if answer_number == my_guess:
            print("정답입니다!")
            print(f"{count}번째 만에 정답을 맞췄습니다!")
            break

# 3. while 문을 한번 더 추가하여 계속 할지 말지 물어보는 기능 추가
while True:
    answer_number = random.randint(1, 100)
		count = 0

    while True:
        my_guess = int(input("1~100사이의 숫자를 입력해주세요!"))
		...
		
		will_continue = input("계속하고 싶으시면 yes를 입력해주세요")

    if will_continue == "yes":
        continue
    else:
        break
		
# 4. 범위 외의 숫자 추가시 다시 입력 받도록 continue 추가 
		 while True:
	        my_guess = int(input("1~100사이의 숫자를 입력해주세요!"))
	        if my_guess > 100 or my_guess < 1:
            print("1과 100사이라고!!")
            continue

# 5. 정답 부분에 최고 점수 구하기 기능 추가 
max_try = 0
while True:
    print(f"현재까지 최대 시도 횟수는 {max_try}입니다.")
		...

    while True:
        my_guess = int(input("1~100사이의 숫자를 입력해주세요!"))
        ...
        if answer_number == my_guess:
            print("정답입니다!")
            print(f"{count}번째 만에 정답을 맞췄습니다!")
            if count > max_try:
                max_try = count
            break
            
----------------------------------------------------------------------

## 과제 2

# 이번에도 나는 함수를 생성해서 호출하는 방식으로 생성
# 설명해주신 튜터님은 while문으로 전부 생성

# 코드 자체의 길이 자체는 비슷

# 나의 경우 승패 판정시 가위바위보는 이김, 짐, 비김 세가지 밖에 없기 때문에 
# 우선 승리하는 경우의 수를 리스트로 생성하고 비김을 확인 후 비기지 않았다면 
# 리스트에서 경우의 수를 찾아 값이 있다면 이김 없다면 짐으로 판단하도록 했다.

# 튜터님도 승패 판단 순서는 같지만 값을 판단하는 것은 정석대로 if 문으로 비교하여 계산하였다.

## 코드 작성 순서

# 1. 랜덤으로 컴퓨터의 패를 생성하고 사용자에게 input으로 받음
options = ["가위", "바위", "보"]

while True:
    random_number = random.randint(0, 2)
    computer_select = options[random_number]

    user_select = input("가위 바위 보 중에서 골라주세요. ")

# 2. 패를 비교하여 결과를 알려주고 승패 통계 계산 부분 추가

...
count_win = 0
count_draw = 0
count_lose = 0

while True:
		user_select = input("가위 바위 보 중에서 골라주세요. ")

		if computer_select == user_select:
        print("비겼습니다!")
        count_draw = count_draw + 1
    else:
        if user_select == "가위":
            if computer_select == "보":
                print("플레이어가 이겼습니다.")
                count_win = count_win + 1
            else:
                print("플레이어가 졌습니다.")
                count_lose = count_lose + 1
        elif user_select == "바위":
            if computer_select == "가위":
                print("플레이어가 이겼습니다.")
                count_win = count_win + 1
            else:
                print("플레이어가 졌습니다.")
                count_lose = count_lose + 1
        else:
            if computer_select == "바위":
                print("플레이어가 이겼습니다.")
                count_win = count_win + 1
            else:
                print("플레이어가 졌습니다.")
                count_lose = count_lose + 1

# 3. 잘못 입력 시 다시 시작
...
		user_select = input("가위 바위 보 중에서 골라주세요. 종료를 원하면 끝 이라고 입력해주세요")

    if user_select not in options:
        print("가위 바위 보 중에서 똑바로 좀 고르세요")
        continue

# 4. 게임 통계 부분 추가
while True:
...
print(f"승리 : {count_win}  무승부 : {count_draw} 패배: {count_lose}")

# 5. 종료할지 계속할지 사용자에게 input으로 받을 때 결정하도록 수정
...
		user_select = input("가위 바위 보 중에서 골라주세요. 종료를 원하면 끝 이라고 입력해주세요")

    if user_select == "끝":
        break

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

## 과제 3

## hashlib

# 아래 코드를 응용
import hashlib

m = hashlib.sha256()
m.update("해싱할 문자열".encode("utf-8")) # 문자열 해싱
print(m.hexdigest()) # 출력값 예시: '9d05275eca4bf8f2027721ce3fd7e6f0aa06dcc381204ed8475be3425c2c5384'

# 해싱은 단방향 암호화 알고리즘 해싱된 값을 가지고 있어도 원본을 알 수 없음

## 회원 비밀번호를 해시화하기

import hashlib

class Member:
    def __init__(self, password):
        m = hashlib.sha256()
        m.update(password.encode("utf-8"))
        self.password = m.hexdigest()
profile
직업: 개발자가 되고 싶은 오레오 집사

0개의 댓글