파이썬을 사용하여 가위바위보 게임을 만들어 볼게요. 가위, 바위, 보 중 하나를 선택하여 컴퓨터와 대결합니다!
RPS = ("가위", "바위", "보")
computer = random.choice(RPS)
가위, 바위, 보 라는 값은 중간에 바뀌지 않기 때문에 tuple을 사용
random.choice
: list, tuple 중 무작위로 한 개의 값을 가져오는 기능
player = input("가위, 바위, 보 중 하나를 선택하세요: ").strip()
if player in RPS:
(내용)
else:
print("유효한 입력이 아닙니다.")
input() 을 통해 사용자의 입력값 저장
in
: 왼쪽 변수가 오른쪽 변수 안의 데이터 중 일치하는 데이터가 존재하는가?
if input("다시 하시겠습니까? (y/n): ").lower() == "y":
continue
else:
print("게임을 종료합니다.")
print(f"승: {player_win} 패: {computer_win} 무승부: {draw}")
break
str.lower()
: 알파벳을 모두 소문자로 변환
게임을 다시 하고 싶다면 Y or y를 입력하면 게임 재시작, 그 외의 입력이 들어온다면 지금까지의 게임 통계를 보여주고 게임을 종료
그 외 승리자 판별, 통계는 가위, 바위, 보의 경우의 수가 별로 없기 때문에 하드 코딩
간단한 소셜 미디어 플랫폼의 회원과 게시물을 관리하는 프로그램을 개발합니다.
Member
클래스와 Post
클래스를 정의하세요.Member
클래스에는 다음과 같은 속성을 가지고 있어야 합니다.name
)username
)password
)Member
클래스에는 다음과 같은 메소드를 가지고 있어야 합니다.display
(회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됩니다!)Post
클래스에는 다음과 같은 속성을 가지고 있어야 합니다.title
)content
)author
) : 회원의 username
이 저장되어야 함!members
라는 빈리스트에 append를 써서 저장해주세요class Member:
def __init__(self, name, username, password):
self.name = name
self.username = username
self.password = password
def display(self):
print(f"이름: {self.name}, ID: {self.username}")
class Post:
def __init__(self, title, content, author):
self.title = title
self.content = content
self.author = author
import hashlib
# 숫자 제한 없이 회원 추가
while 1:
name = input("이름을 입력해주세요: ").strip()
username = input("ID를 입력해주세요: ").strip()
if username in members_username:
print("해당 ID는 사용중입니다. 다른 ID를 사용해주세요.")
continue
password = input("패스워드를 입력해주세요: ").strip()
password_hash = hashlib.sha256(password.encode("utf-8")).hexdigest()
members.append(Member(name, username, password_hash))
members_username.append(username)
if input("회원을 계속 추가하시겠습니까? (y/n): ").lower() == "y":
print() # 프롬프트에서 가독성을 위해 사용
continue
else:
break
name, username, password를 입력받고 이를 members라는 list에 class를 추가
클래스는 기본적으로 member1 = Member(name, username, password_hash)
의 형태로 사용하지만 바로 list에 추가하여 인스턴스의 주소값을 list에 저장하여 반복적으로 클래스를 만드는 것을 구현
비밀번호는 일반적으로 값을 그대로 저장하지 않고 보안적인 측면에서 hash 처리를 하고 저장
hashlib을 사용하여 sha-256 암호화 방법을 사용하여 hash 처리한 password를 클래스에 저장
encode()
: hash 값을 계산하기 위해 데이터를 바이트 시퀸스로 변환하기 위해 사용, 문자열을 바이트로 변환
hexdigest()
: 저장, 출력이 쉽도록 hash값을 16진수 문자열로 변환
members_username
: ID만을 모으는 리스트로 중복 여부, 추후 검색 시 아이디 존재 여부를 확인할 때 사용
숫자 제한 없이 게시물 추가 기능은 위와 거의 동일
# 전체 회원의 이름 출력
print(f"회원 리스트(총 인원: {len(members)}명)")
for member in members:
member.display()
members 리스트에 저장된 클래스를 반복하면서 클래스의 method를 사용하여 전체 회원의 이름, ID 출력
while 1:
cnt = 0
list_num = 1
search_username_post = input("검색하고 싶은 ID를 입력하세요: ")
if search_username_post in members_username:
for post in posts:
if post.author == search_username_post:
print(f"{list_num} {post.title}")
list_num += 1
cnt += 1
if cnt == 0:
print("해당 회원님이 작성한 게시물이 존재하지 않습니다.")
else:
print("해당 ID를 가진 회원이 존재하지 않습니다.")
if input("ID 검색을 계속 하시겠습니까? (y/n): ").lower() == "y":
print()
continue
else:
break
검색을 위해 입력한 회원의 ID가 존재해도 게시물이 존재하지 않을 수도 있기 때문에 cnt 변수를 사용하여 회원은 존자하지만 게시물이 없을 경우에 대한 출력 구현
특정 단어가 포함된 게시물 검색도 위와 거의 동일