2024.11.21 TIL(AI 9기)

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