일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 러스트
- Database
- 자바 기초
- 파이썬 첼린지
- 백준 러스트
- 알고리즘
- 파이썬
- 데이터 통신
- Python challenge
- 자바
- data communication
- 자바 개념
- 오라클
- 백준
- 파이썬 알고리즘
- 파이썬 챌린지
- java
- Operating System
- Rust
- OS
- 러스트 예제
- Reversing
- C
- Python
- 러스트 프로그래밍 공식 가이드
- 오라클DB
- 운영체제
- 데이터베이스
- 우분투
- ubuntu
Archives
- Today
- Total
IT’s Portfolio
[Python] 코딩도장 - 주사위 도박 본문
728x90
반응형
문제의 내용 조금 바꿔봤음
1. 딜러 한명 유저 3명 한 번에 게임 진행
2. 유저들의 초기 자본 5만원 고정
import random
# 주사위 두 개
dice1 = random.Random()
dice2 = random.Random()
def bat_money() -> list:
while 1:
# user_bat = []
print("\n==================")
msg = input("유저 세 명의 배팅 금액을 띄어쓰기로 구분해 입력해주세요.\n(1 ~ 10,000)>>> ")
if len(msg.split(" ")) == 3:
'''
for i in msg.split(" "):
if 1 <= int(i) <= 10000:
user_bat.append(int(i))
복잡한 for~if문 세 줄을 한 줄로 줄임
'''
user_bat = [int(i) for i in msg.split(" ") if 1 <= int(i) <= 10000]
# 리스트의 길이가 3이 되면 while 문에서 빠져나오기
if len(user_bat) == 3:
break
else:
print("배팅 금액의 범위는 1 ~ 10,000 입니다.")
else:
print("세 명의 배팅 금액을 입력해주세요.")
return user_bat
def game(user_num, user_money, user_bat_money) -> list:
print(f"Dealer VS User{user_num}\nUser{user_num} 잔고: {user_money:,}원\nUser{user_num}이 배팅한 금액: {user_bat_money:,}원")
# 딜러의 주사위 결과
dealer_dices = dice_rule("Dealer", dice1.randint(1, 6), dice2.randint(1, 6))
# 유저의 주사위 결과
user_dices = dice_rule(f"User{user_num}", dice1.randint(1, 6), dice2.randint(1, 6))
# 주사위 숫자에 따른 결과 계산
result = match(dealer_dices, user_dices)
# 반환받은 result 값에 대한 출력문
if result == "Draw":
print("Draw\n")
elif "D" in result:
print("Dealer Win\n")
elif "U" in result:
print(f"User{user_num} Win\n")
return [result, user_num, user_bat_money]
def match(d, u) -> str:
# 인자로 받은 딜러와 유저의 주사위 결과 타입으로 반환 메시지 결정
if type(d) == int and type(u) == int:
msg = "D 1" if d > u else "U 1"
elif type(d) == list:
if type(u) == list:
msg = "D 2" if d[0] > u[0] else "Draw" if d[0] == u[0] else "U 2"
else:
msg = "D 2"
else:
msg = "U 2"
return msg
def dice_rule(name, num1, num2):
print(f"{name}'s Result: {num1} / {num2}")
# 만약 두 개의 주사위 눈금이 같지 않으면 그냥 합해서 반환시켜줌
if not num1 == num2:
return num1 + num2
# 같으면 리스트 형식으로 반환시켜줌
else:
return [num1, num2]
def print_rank(user):
user_rank = {}
for i in range(len(user)):
# 인자로 받은 리스트에 0보다 작은 값이 있으면 0으로 초기화시킴
if user[i] < 0:
user[i] = 0
print(f"User{i+1} 잔고: {user[i]:,}원")
# 순위 알고리즘 (잔고가 0이면 순위가 아닌 파산으로 나타남)
r = 1
for j in range(len(user)):
if user[i] == 0:
r = "파산"
elif user[i] < user[j]:
r = r+1
user_rank[f"User{i+1}"] = r
# 출력
for i in user_rank:
if type(user_rank[i]) == str:
print(f"{i}: {user_rank[i]}")
else:
print(f"{i}: {user_rank[i]}위")
if __name__ == "__main__":
print(f"유저 세 명의 초기 자본금은 50,000원 입니다.")
user = [50000, 50000, 50000]
# 게임 횟수 10번
cnt = 0
while cnt < 10:
user_bat = bat_money()
print(f"==================\nGame{cnt+1}!\n==================")
for i in range(len(user)):
if user[i] <= 0:
user[i] = 0
print(f"* User{i+1}은 자본금을 모두 잃었기에 배팅 금액 {user_bat[i]:,}원은 0원으로 조정됩니다 *\n")
continue
else:
result = game(i+1, user[i], user_bat[i])
# 반환받은 문자열의 규칙을 사용하여 배팅금 정산
if "D" in result[0]:
user[result[1] - 1] = user[result[1] - 1] - result[2] * int(result[0].split(" ")[1])
elif "U" in result[0]:
user[result[1] - 1] = user[result[1] - 1] + result[2] * int(result[0].split(" ")[1])
'''
bankruptcy = []
for i in range(len(user)):
if user[i] <= 0:
bankruptcy.append(i)
복잡한 for~if문 네 줄을 한 줄로 줄임
'''
# 잔고가 0 이하면 해당 유저 번호 리스트에 추가
bankruptcy = [i for i in range(len(user)) if user[i] <= 0]
# 만약 리스트의 길이가 있다면 파산 여부 출력
if bankruptcy:
for i in bankruptcy:
print(f"User{i+1} ", end="파산 ")
# 만약 리스트 길이가 2가 되면 바로 게임 종료
if len(bankruptcy) == 2:
break
cnt = cnt + 1
print("\n==================\nGame Result!\n==================")
print_rank(user)
728x90
반응형
'Development Study > Python' 카테고리의 다른 글
[Python] isinstance() 함수에 대해서 (0) | 2021.01.08 |
---|---|
[Python] 파이썬 requests 모듈의 HTTPAdapter와 Retry (0) | 2021.01.06 |
[Python] 로또 번호 생성기 (0) | 2020.12.23 |
[Python] 함수의 반환 형태 지정하기 (0) | 2020.12.05 |
[Python] 클래스 내장모듈 중 자주 쓰이는 __init__, __str__, __repr__에 대해서 (0) | 2020.12.05 |
Comments