티스토리 뷰
어제에 이어 오늘도 과제 문항을 완성시켜보았다 추가적으로 게임의 시행횟수를 넣는 코드와 최대 도전횟수를 넣어보았다
def number_game():
random_number = random.randint(1, 100)
max_attempts = 7
attempts = 0
while attempts < max_attempts:
user_input = input("업 다운 게임 기회 7번 숫자를 입력하세요: ")
max_attempts = 7 로 최대 도전횟수를 정해준다 while문을 통해 attempts < max_attempts 을 추가하여 현재 시도한 횟수인 attempts가 최대 시도 횟수인 max_attempts보다 작은지를 비교하는 조건식을 만들고 해당 조건식은 현재 시도한 횟수가 최대 시도 횟수보다 작을 때 참(True)이 된다 따라서 게임이 종료되지 않고 최대 시도 횟수에 도달하지 않았을 때 이 조건이 참이 된다 처음에 attempts = 0을 아래에 써 넣지 않아서 게임을 시작하고 7회이상 시도하여 게임에서 패배시 저장되는 시행횟수가 7로 고정이 되어버렸다
이후
attempts += 1
if guess < random_number:
print("업")
elif guess > random_number:
print("다운")
else:
print("정답입니다! 시도 횟수:", attempts)
break
else:
print("입력횟수를 초과했습니다 게임오버")
attempts = 0
return attempts
else문을 추가해 시도횟수를 표기하는 함수를 넣고 7회이상 시도할시 게임오버가 되게 만들었다 return attempts 문장은 number_game() 함수에서 시도한 횟수를 호출한 곳으로 반환하기 위해 사용된다 attempts += 1은 현재 시도 횟수 변수인 attempts에 1을 더하는 연산이다 플레이어가 새로운 시도를 한 번 더 했음을 나타낸다
def main():
best_score = float('inf')
while True:
attempts = number_game()
if attempts < best_score:
best_score = attempts
print("최고기록 달성!: ", best_score)
else:
print("이전 최고 기록: ", best_score)
최고점수를 표기하기위해 float('inf')를 넣었다 이는 파이썬에서 무한대를 나타내는 특별한 값이다 'inf'는 '무한대(infinity)'를 의미하며 이 값은 파이썬에서 부동 소수점 형식의 최대값보다 큰 숫자를 나타낸다 그리고 게임의 재시도를 하기위한 함수를 추가했다
number_re = input("다시 하시겠습니까? (y/n): ")
if number_re.lower() != "y":
print("게임을 종료합니다")
break
우선 인풋에 들어간 y/n 문구를 입력할때 대소문자의 구분이 필요하다 따라서 .lower()추가하여 는 문자열을 모두 소문자로 변환하였다 " ! " 는 부정 연산자로 사용되며 논리 연산에서 사용될 때 특별한 의미를 갖는다 주로 "아니다", "부정"이라는 의미로 해석된다 따라서 != "y"는 "문자열이 "y"와 같지 않다"는 뜻이 된다 즉, 사용자가 "y"를 입력하지 않은 경우를 나타낸다
if __name__ == "__main__":
main()
마지막으로 if 문의 시행할 함수를 수정하고 돌려봤다
전체코드
import random
def check_int(s):
if s.isdigit() is True:
return int(s)
elif s[0] in ('-', '+'):
if s[1:].isdigit() is True:
return int(s[1:])
else:
return False
def number_game():
random_number = random.randint(1, 100)
max_attempts = 7
attempts = 0
while attempts < max_attempts:
user_input = input("업 다운 게임 기회 7번 숫자를 입력하세요: ")
guess = check_int(user_input)
if not guess:
print("숫자를 입력해주세요")
continue
if guess < 1 or guess > 100:
print("유효한 범위 내의 숫자를 입력하세요")
continue
attempts += 1
if guess < random_number:
print("업")
elif guess > random_number:
print("다운")
else:
print("정답입니다! 시도 횟수:", attempts)
break
else:
print("입력횟수를 초과했습니다 게임오버")
attempts = 0
return attempts
def main():
best_score = float('inf')
while True:
attempts = number_game()
if attempts < best_score:
best_score = attempts
print("최고기록 달성!: ", best_score)
else:
print("이전 최고 기록: ", best_score)
number_re = input("다시 하시겠습니까? (y/n): ")
if number_re.lower() != "y":
print("게임을 종료합니다")
break
if __name__ == "__main__":
main()
아직 해결하지 못한 부분들도 있다.. 소수나 음수를 읽히게 한다던가
- 오늘의 회고 및 한주 정리
강의만 듣다 처음으로 문제풀이에 들어가게 되었다 기본적인 print로 아무것도 없는 빈페이지를 채우는것부터 시작해서 하나씩 써내려갔다 강의 코드스니펫에 살을 입히는 것으로 접근하며 그 이후에 구글링이나 질문을 통해 하나씩 추가해 나갔다 물론 아직도 내가 직접 생각해서 쓴 코드는 1할도 되지않는다 그래도 무언가 작동이 되고 의도대로 움직이는 모습을 차차 보고있으니 뿌듯해졌다 역시 강의를 보는것도 중요하지만 직접 고민하며 써내려가야 이해가 훨씬 쉬운것 같다 다음주엔 두번째 문항 이후 4번까지 쭉 풀어볼생각이다 약간의 자신감도 붙었다 2번같은 경우는 1번의 연장선이라 금방할거같기도 하다 이번주팀은 다음주에서도 이어진다 든든한 팀장님과 함께 다음주도 잘 마무리 할수 있을거같다
'내일배움캠프 개발자과정 > TIL' 카테고리의 다른 글
내일배움캠프 12일차 TIL (2) | 2024.02.28 |
---|---|
내일배움캠프 10일차 TIL (0) | 2024.02.26 |
내일배움캠프 8일차 TIL (0) | 2024.02.22 |
내일배움캠프 7일차 TIL (0) | 2024.02.21 |
내일배움캠프 6일차 TIL (0) | 2024.02.20 |