-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[자동차 경주] 김성규 과제 제출합니다. #4
base: main
Are you sure you want to change the base?
Changes from 17 commits
a40b73b
c069935
0b7e82a
4b579ff
75982a7
c4b2b41
0a6a231
80eee98
20bed73
2e4f3e5
71066ba
e0aa6fb
c323efc
f1b92ea
4ab0a42
f7d45ce
6837570
22e727e
4ef52ec
a660e9f
0b74e46
a99e7f6
eba3e99
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# 자동차 경주 게임 | ||
|
||
## 기능 목록 | ||
|
||
1. **자동차 이름 입력** | ||
- 사용자가가 쉼표(`,`)로 구분된 자동차 이름을 입력 | ||
- 각 자동차 이름은 1~5자의 문자 | ||
- 잘못된 입력일 경우 `ValueError`를 발생시키고 프로그램을 종료 | ||
|
||
2. **이동 횟수 입력** | ||
- 사용자가 몇 번의 이동을 할 것인지 숫자로 입력 | ||
- 1 이상의 정수를 입력해야 하며, 잘못된 입력 시 `ValueError` 발생 | ||
|
||
3. **자동차 이동 로직** | ||
- 각 자동차는 매 턴마다 0~9 사이의 무작위 값을 얻음 | ||
- 값이 4 이상이면 자동차는 한 칸(`-`) 전진 | ||
- 값이 3 이하이면 그대로 멈춤 | ||
|
||
4. **경기 진행 및 결과 출력** | ||
- 입력받은 횟수만큼 경기를 진행 | ||
- 매 턴마다 각 자동차의 진행 상태를 출력 | ||
|
||
5. **우승자 선정** | ||
- 가장 멀리 간 자동차가 우승자 | ||
- 우승자가 여러 명일 경우 쉼표(`,`)로 구분하여 출력 | ||
|
||
6. **예외 처리** | ||
- 잘못된 자동차 이름(1~5자 초과 또는 공백) 입력 시 `ValueError` 발생 | ||
- 이동 횟수를 1 이상의 정수로 입력하지 않으면 `ValueError` 발생 |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,12 +1,57 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||
def main(): | ||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||
프로그램의 진입점 함수. | ||||||||||||||||||||||||||||||||||||||||||||||||||
여기에서 전체 프로그램 로직을 시작합니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||
# 프로그램의 메인 로직을 여기에 구현 | ||||||||||||||||||||||||||||||||||||||||||||||||||
print("프로그램이 시작되었습니다.") | ||||||||||||||||||||||||||||||||||||||||||||||||||
import random | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
THRESHOLD = 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||
RANDOM_MAX = 9 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
def get_car_names(): | ||||||||||||||||||||||||||||||||||||||||||||||||||
names = input("경주할 자동차 이름을 입력하세요. (이름은 쉼표로 구분)\n").split(",") | ||||||||||||||||||||||||||||||||||||||||||||||||||
names = [name.strip() for name in names] | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
if not names or any(len(name) > 5 or not name for name in names): | ||||||||||||||||||||||||||||||||||||||||||||||||||
raise ValueError("자동차 이름은 1~5자의 문자여야 합니다.") | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
return names | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
def get_attempt_count(): | ||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||
count = int(input("시도할 횟수는 몇 회인가요?\n")) | ||||||||||||||||||||||||||||||||||||||||||||||||||
if count <= 0: | ||||||||||||||||||||||||||||||||||||||||||||||||||
raise ValueError("올바른 횟수를 입력하세요. (양의 정수)") | ||||||||||||||||||||||||||||||||||||||||||||||||||
return count | ||||||||||||||||||||||||||||||||||||||||||||||||||
except ValueError as error: | ||||||||||||||||||||||||||||||||||||||||||||||||||
raise ValueError("올바른 횟수를 입력하세요. (양의 정수)") from error | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
def move_car(): | ||||||||||||||||||||||||||||||||||||||||||||||||||
return "-" if random.randint(0, RANDOM_MAX) >= THRESHOLD else "" | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
def run_race(cars, attempts): | ||||||||||||||||||||||||||||||||||||||||||||||||||
results = {car: "" for car in cars} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
print("\n실행 결과") | ||||||||||||||||||||||||||||||||||||||||||||||||||
for _ in range(attempts): | ||||||||||||||||||||||||||||||||||||||||||||||||||
for car in cars: | ||||||||||||||||||||||||||||||||||||||||||||||||||
results[car] += move_car() | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
for car, progress in results.items(): | ||||||||||||||||||||||||||||||||||||||||||||||||||
print(f"{car} : {progress}") | ||||||||||||||||||||||||||||||||||||||||||||||||||
print() | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
return results | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
def get_winners(results): | ||||||||||||||||||||||||||||||||||||||||||||||||||
max_distance = max(len(progress) for progress in results.values()) | ||||||||||||||||||||||||||||||||||||||||||||||||||
return [car for car, progress in results.items() if len(progress) == max_distance] | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
def main(): | ||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||
cars = get_car_names() | ||||||||||||||||||||||||||||||||||||||||||||||||||
attempts = get_attempt_count() | ||||||||||||||||||||||||||||||||||||||||||||||||||
results = run_race(cars, attempts) | ||||||||||||||||||||||||||||||||||||||||||||||||||
winners = get_winners(results) | ||||||||||||||||||||||||||||||||||||||||||||||||||
print(f"최종 우승자 : {', '.join(winners)}") | ||||||||||||||||||||||||||||||||||||||||||||||||||
except ValueError as error: | ||||||||||||||||||||||||||||||||||||||||||||||||||
print(f"입력 오류: {error}") | ||||||||||||||||||||||||||||||||||||||||||||||||||
raise | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion 에러 처리 방식을 개선해주세요. 현재 구현은 에러 메시지를 출력한 후 다시 예외를 발생시키고 있습니다. 사용자 경험을 위해 다음과 같이 개선하는 것이 좋습니다:
def main():
- try:
- cars = get_car_names()
- attempts = get_attempt_count()
- results = run_race(cars, attempts)
- winners = get_winners(results)
- print(f"최종 우승자 : {', '.join(winners)}")
- except ValueError as error:
- print(f"입력 오류: {error}")
- raise
+ while True:
+ try:
+ cars = get_car_names()
+ attempts = get_attempt_count()
+ results = run_race(cars, attempts)
+ winners = get_winners(results)
+ print(f"최종 우승자 : {', '.join(winners)}")
+ break
+ except ValueError as error:
+ print(f"입력 오류: {error}")
+ retry = input("다시 시도하시겠습니까? (y/n): ")
+ if retry.lower() != 'y':
+ break 📝 Committable suggestion
Suggested change
🧰 Tools🪛 GitHub Actions: Check PEP8 Style[error] 45-45: E302 expected 2 blank lines, found 1 |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
if __name__ == "__main__": | ||||||||||||||||||||||||||||||||||||||||||||||||||
# 프로그램이 직접 실행될 때만 main() 함수를 호출 | ||||||||||||||||||||||||||||||||||||||||||||||||||
main() | ||||||||||||||||||||||||||||||||||||||||||||||||||
main() | ||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion 파일 끝에 개행을 추가해주세요. PEP8 스타일 가이드에 따라 파일 끝에 빈 줄을 추가해야 합니다. if __name__ == "__main__":
- main()
+ main()
+ 📝 Committable suggestion
Suggested change
🧰 Tools🪛 GitHub Actions: Check PEP8 Style[error] 56-56: E305 expected 2 blank lines after class or function definition, found 1 [warning] 57-57: W292 no newline at end of file 🪛 GitHub Actions: Check Indentation Depth[warning] 57-57: Final newline missing |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
후행 공백을 제거해주세요.
43번 줄의 후행 공백을 제거해야 합니다.
📝 Committable suggestion
🧰 Tools
🪛 GitHub Actions: Check Indentation Depth
[warning] 43-43: Trailing whitespace
🪛 GitHub Actions: Check PEP8 Style
[error] 32-32: E302 expected 2 blank lines, found 1
[warning] 43-43: W293 blank line contains whitespace