티스토리 뷰
import random
from colorama import init, Fore, Style
import webbrowser
import sqlite3
init()
# 파일 읽기
file_path = 'D:\\최정훈\\python sia quiz\\사자성어 퀴즈\\사자성어.txt'
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
# 사자성어와 설명을 분리하여 저장
proverbs = {}
for line in lines:
parts = line.strip().split(':')
if len(parts) == 2:
proverbs[parts[0].strip()] = parts[1].strip()
# 데이터베이스 설정
db_path = 'scores.db'
conn = sqlite3.connect(db_path)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS scores (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score INTEGER)''')
conn.commit()
# 사용자 이름 입력 받기
username = input("당신의 이름을 입력하세요: ")
# 랜덤으로 사자성어 선택 및 퀴즈 생성
def create_quiz(proverbs, num_choices=5):
correct_answer = random.choice(list(proverbs.keys()))
choices = random.sample(list(proverbs.keys()), num_choices - 1)
if correct_answer not in choices:
choices.append(correct_answer)
random.shuffle(choices)
return proverbs[correct_answer], choices, correct_answer
# 퀴즈 생성 및 사용자에게 제시
score = 0
correct = True
print("[사자성어 퀴즈]")
hint = []
while correct:
description, choices, correct_answer = create_quiz(proverbs)
# 사용자에게 문제 제시
print(f"\n설명: {description}")
print("보기:")
for i, choice in enumerate(choices, 1):
print(f"{i}. {choice}")
hint.append(choice)
print(Style.RESET_ALL, end="")
hint_num = int(input(Fore.BLUE + "몇 번 힌트를 원하시나요? (0-5), 0은 힌트 없음 : "))
if hint_num != 0:
url = f"https://hanja.dict.naver.com/#/search?query={hint[hint_num - 1]}&range=all"
webbrowser.get('c:/program files/internet explorer/iexplore.exe %s').open(url)
hint = []
# 사용자 입력 받기
user_answer = input(Fore.YELLOW + "정답 번호를 입력하세요: ")
print(Style.RESET_ALL, end="")
# 정답 확인
correct = choices[int(user_answer) - 1] == correct_answer
print(Fore.GREEN + "정답입니다!" if correct else Fore.RED + f"오답입니다. 정답은 {correct_answer}입니다.")
print(Style.RESET_ALL, end="")
if correct:
score += 1
# 스코어 데이터베이스에 저장
c.execute("INSERT INTO scores (name, score) VALUES (?, ?)", (username, score))
conn.commit()
print(Fore.RED + f"\n{username}님의 최종 스코어는 {score}점 입니다.")
# 모든 스코어 출력
print(Fore.BLUE + "\n[모든 사용자 점수]")
for row in c.execute("SELECT name, score FROM scores"):
print(f"{row[0]}: {row[1]}점")
print(Fore.BLUE + "\n[최고 점수]")
for row in c.execute("SELECT name, score FROM scores order by score desc limit 1"):
print(f"{row[0]}: {row[1]}점")
conn.close()
설명: 겉으로는 따르는 척 하나 속으로는 배신함을 이르는 말.
보기:
1. 金枝玉葉(금지옥엽)
2. 斷機之戒(단기지계)
3. 面從腹背(면종복배)
4. 傾國之色(경국지색)
5. 男負女戴(남부여대)
몇 번 힌트를 원하시나요? (0-5), 0은 힌트 없음 : 0
정답 번호를 입력하세요: 3
정답입니다!
설명: 같은 병의 환자끼리 서로 가엾게 여긴다는 뜻. 어려운 처지에 있는 사람끼리 동정하고 도와줌.
보기:
1. 家藏什物(가장집물)
2. 名實相符(명실상부)
3. 同病相憐(동병상련)
4. 同床異夢(동상이몽)
5. 南柯一夢(남가일몽)
몇 번 힌트를 원하시나요? (0-5), 0은 힌트 없음 : 0
정답 번호를 입력하세요: 3
정답입니다!
설명: 다른 일에 정신을 뺏겨 중요한 일을 소홀히 함을 이르는 말.
보기:
1. 讀書亡羊(독서망양)
2. 結者解之(결자해지)
3. 錦衣還鄕(금의환향)
4. 斷機之戒(단기지계)
5. 百年偕老(백년해로)
몇 번 힌트를 원하시나요? (0-5), 0은 힌트 없음 : 0
정답 번호를 입력하세요: 1
정답입니다!
설명: 하늘이 돕고 신이 도움.
보기:
1. 天佑神助(천우신조)
2. 傍若無人(방약무인)
3. 白骨難忘(백골난망)
4. 內憂外患(내우외환)
5. 千載一遇(천재일우)
몇 번 힌트를 원하시나요? (0-5), 0은 힌트 없음 : 0
정답 번호를 입력하세요: 1
정답입니다!
설명: 막대기 끝에 선 형세라는 뜻으로 아주 위태로운 상황을 이르는 말.
보기:
1. 粉骨碎身(분골쇄신)
2. 多岐亡羊(다기망양)
3. 落穽下石(낙정하석)
4. 竿頭之勢(간두지세)
5. 傍若無人(방약무인)
몇 번 힌트를 원하시나요? (0-5), 0은 힌트 없음 : 0
정답 번호를 입력하세요: 3
오답입니다. 정답은 竿頭之勢(간두지세)입니다.
ccc님의 최종 스코어는 28점 입니다.
모든 사용자 점수:
choi: 5점
choi2: 1점
choi3: 1점
ccc: 28점
최고 사용자 점수:
ccc: 28점
PS D:\최정훈\python sia quiz\사자성어 퀴즈>
728x90
반응형
'키즈 노트' 카테고리의 다른 글
키즈노트 #8 사자성어 퀴즈 로컬 웹페이지 구현 (0) | 2024.06.27 |
---|---|
키즈노트 #6 사자성어 퀴즈 + 네이버 사전 힌트 (0) | 2023.11.28 |
키즈노트 #5 사자성어 퀴즈 (0) | 2023.11.27 |
키즈노트 #4 10진법 to 2진법 계산 (1) | 2023.11.26 |
키즈노트 #3 날짜 사이 계산하기 (2) | 2023.11.26 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Bandit
- 풀이
- Strings
- bz2
- 웹보안공부
- find
- ssh
- 리터럴
- BASE64
- tar
- solution
- HTTPS
- X32
- 압축파일
- nc
- Encode
- gz
- grep
- OpenSSL
- Natas
- tr
- 32bit
- 웹보안
- 리눅스
- Linux
- OverTheWire
- over the wire
- natas7
- java
- SSL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함