SMALL
[파이썬]
퀘스트 풀이!
Lv2. 스파르타 자판기
beverages = {
"사이다": 1700,
"콜라": 1900,
"식혜": 2500,
"솔의눈": 3000
}
print("음료 목록:")
for key, value in beverages.items():
print(f"{key}: {value}원")
user_choice = input("음료를 선택해주세요: ")
if user_choice in beverages:
coin = input("금액을 입력해주세요: ")
try:
coin = int(coin)
except ValueError:
print("잘못된 금액입니다. 숫자를 입력해주세요.")
exit()
if coin < beverages[user_choice]:
print("돈이 부족합니다.")
else:
remain = coin - beverages[user_choice]
print(f"{user_choice}를 구매했습니다. 잔돈: {remain}원")
else:
print("잘못된 선택입니다. 목록에 있는 음료를 입력해주세요.")
Lv3. 단어 맞추기 게임
import random
words = [
"airplane",
"apple",
"arm",
"bakery",
"banana",
"bank",
"bean",
"belt",
"bicycle",
"biography",
"blackboard",
"boat",
"bowl",
"broccoli",
"bus",
"car",
"carrot",
"chair",
"cherry",
"cinema",
"class",
"classroom",
"cloud",
"coat",
"cucumber",
"desk",
"dictionary",
"dress",
"ear",
"eye",
"fog",
"foot",
"fork",
"fruits",
"hail",
"hand",
"head",
"helicopter",
"hospital",
"ice",
"jacket",
"kettle",
"knife",
"leg",
"lettuce",
"library",
"magazine",
"mango",
"melon",
"motorcycle",
"mouth",
"newspaper",
"nose",
"notebook",
"novel",
"onion",
"orange",
"peach",
"pharmacy",
"pineapple",
"plate",
"pot",
"potato",
"rain",
"shirt",
"shoe",
"shop",
"sink",
"skateboard",
"ski",
"skirt",
"sky",
"snow",
"sock",
"spinach",
"spoon",
"stationary",
"stomach",
"strawberry",
"student",
"sun",
"supermarket",
"sweater",
"teacher",
"thunderstorm",
"tomato",
"trousers",
"truck",
"vegetables",
"vehicles",
"watermelon",
"wind"
]
chosen_word = random.choice(words)
word_length = len(chosen_word)
hidden_word = ["_"] * word_length
attempts = 9
used_letters = []
print("=== 단어 맞추기 게임 ===")
print(f"단어는 {word_length}자리입니다. 목숨은 {attempts}번입니다.")
print("단어: " + " ".join(hidden_word))
while attempts > 0 and "_" in hidden_word:
print(f"\n남은 목숨: {attempts}")
print(f"사용한 알파벳: {', '.join(used_letters)}")
user_input = input("알파벳을 선택하세요 (A-Z): ").lower()
if len(user_input) != 1 or not user_input.isalpha():
print("잘못된 입력입니다. 알파벳 한 글자만 입력하세요.")
continue
if user_input in used_letters:
print("이미 사용한 알파벳입니다. 다른 알파벳을 선택하세요.")
continue
used_letters.append(user_input)
if user_input in chosen_word:
print(f"정답! {user_input}는 단어에 포함되어 있습니다.")
for i, letter in enumerate(chosen_word):
if letter == user_input:
hidden_word[i] = user_input
else:
print(f"틀렸습니다! {user_input}는 단어에 포함되어 있지 않습니다.")
attempts -= 1
print("단어: " + " ".join(hidden_word))
if "_" not in hidden_word:
print("\n축하합니다! 단어를 맞췄습니다!")
else:
print("\n게임 오버! 단어는 다음과 같았습니다:")
print(f"{chosen_word}")
- .lower() 입력 값을 소문자로 바꿔주는 코드
- .upper() 입력 값을 대문자로 바꿔주는 코드
- 만약 게임에서 사용자가 입력한 알파벳과 단어를 비교할 때 대소문자를 구분하지 않도록 하고 싶다면, 단어와 입력 값을 모두 소문자로 변환하면 된다.
[코드 상세 설명]
1. 랜덤 단어 선택
- chosen_word = random.choice(words):
- random.choice(words)는 words 리스트에서 무작위로 하나의 단어를 선택합니다. 예를 들어, "airplane" 또는 "wind"가 선택될 수 있습니다.
- word_length = len(chosen_word):
- chosen_word의 길이를 구하여 단어의 자릿수를 저장합니다. 예를 들어, "airplane"은 8자리, "wind"는 4자리입니다.
- hidden_word = ["_"] * word_length:
- 게임에서 숨겨야 할 단어를 나타내는 리스트입니다. 단어의 길이만큼 _로 채운 리스트가 생성됩니다. 예를 들어 "airplane"이 선택되면 ["_", "_", "_", "_", "_", "_", "_", "_"]가 됩니다.
- attempts = 9:
- 사용자가 틀릴 수 있는 목숨의 수를 9번으로 설정합니다.
- used_letters = []:
- 사용자가 이미 입력한 알파벳을 추적하는 리스트입니다. 이 리스트에 이미 사용된 알파벳을 추가하여 중복 입력을 방지합니다.
2. 게임 시작 출력
- print("=== 단어 맞추기 게임 ==="):
- 게임 시작 메시지를 출력합니다.
- print(f"단어는 {word_length}자리입니다. 목숨은 {attempts}번입니다."):
- 선택된 단어의 길이와 사용자가 틀릴 수 있는 목숨의 수를 출력합니다.
- print("단어: " + " ".join(hidden_word)):
- 현재 단어의 상태를 출력합니다. "_ _ _ _" 형태로 각 자리가 _로 숨겨져 있습니다.
- join(hidden_word)는 리스트를 문자열로 결합하는 방법입니다.
3. 게임 진행
- while attempts > 0 and "_" in hidden_word::
- 이 while 문은 목숨이 남아 있고 (attempts > 0), 단어를 모두 맞추지 않은 경우 ("_" in hidden_word)에 계속 실행됩니다.
- 사용자가 틀릴 때마다 목숨이 하나씩 줄어들고, 단어를 맞추면 _가 알파벳으로 바뀌어 더 이상 "_ "를 포함하지 않게 됩니다.
- print(f"\\n남은 목숨: {attempts}"):
- 남아있는 목숨을 출력합니다.
- print(f"사용한 알파벳: {', '.join(used_letters)}"):
- 사용자가 이미 입력한 알파벳들을 출력합니다. 예: "A, B, C".
- user_input = input("알파벳을 선택하세요 (A-Z): ").lower():
- 사용자가 알파벳을 입력받습니다. 입력된 알파벳을 소문자로 변환(.lower())하여 대소문자 구분을 없애고, 이를 user_input에 저장합니다.
4. 입력 유효성 검사
- if len(user_input) != 1 or not user_input.isalpha()::
- 사용자가 알파벳 한 글자만 입력해야 하므로, 입력의 길이가 1이 아니거나 알파벳이 아닌 경우에는 오류 메시지를 출력하고 다시 입력을 받도록 합니다.
- if user_input in used_letters::
- 이미 사용한 알파벳을 입력한 경우, 사용자에게 경고 메시지를 출력하고 다시 입력을 받도록 합니다.
5. 정답 확인 및 숨겨진 단어 업데이트
- used_letters.append(user_input):
- 사용자가 입력한 알파벳을 used_letters 리스트에 추가하여 중복 입력을 방지합니다.
- if user_input in chosen_word::
- 사용자가 입력한 알파벳이 단어에 포함되어 있는지 확인합니다.
- print(f"정답! {user_input}는 단어에 포함되어 있습니다."):
- 사용자가 맞춘 경우, 해당 알파벳이 단어에 포함되어 있다는 메시지를 출력합니다.
- for i, letter in enumerate(chosen_word)::
- enumerate()는 chosen_word를 순회하며 인덱스(i)와 문자(letter)를 제공합니다.
- 입력한 알파벳이 단어에 포함되어 있다면, 그 위치에 해당 알파벳을 **hidden_word*에 채웁니다. 예: "airplane"에서 "a"를 맞추면, hidden_word[0]이 "a"로 바뀝니다.
- else::
- 입력한 알파벳이 단어에 없는 경우:
- 틀렸다는 메시지를 출력하고, attempts -= 1로 목숨을 하나 줄입니다.
- 입력한 알파벳이 단어에 없는 경우:
6. 단어 상태 출력
- 사용자가 맞춘 부분은 hidden_word에 표시되고, 그 상태를 문자열로 연결하여 출력합니다. 예: "_ a _ _ _ _ _ _".
7. 게임 종료 후 결과 출력
- if "_" not in hidden_word::
- hidden_word에 더 이상 _가 없으면 (즉, 모든 문자를 맞추었으면) 승리 메시지를 출력합니다.
- else::
- 목숨이 모두 소진되었고, 단어를 맞추지 못한 경우 chosen_word를 출력하며 게임 오버 메시지를 출력합니다.
[공부 계획]
본캠프 시작일이 다음주 월요일로 다가왔다.
남은 시간은 목, 금, 토, 일
본캠 전까지 점프 투 파이썬 완강이 목표!
LIST
'Today I learned' 카테고리의 다른 글
2024.11.26 TIL (+프로그래머스,SQL 질문과 답) (2) | 2024.11.26 |
---|---|
2024.11.22 TIL(AI 9기) (0) | 2024.11.22 |
2024.11.20 TIL(AI 9기) (1) | 2024.11.20 |
2024.11.19 TIL(AI 9기) (0) | 2024.11.19 |
2024.11.18 TIL(AI 9기) (1) | 2024.11.18 |