-
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
Open
kimseonggyu03
wants to merge
23
commits into
swthewhite-lab:main
Choose a base branch
from
kimseonggyu03:kimseonggyu03
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+96
−7
Open
Changes from all commits
Commits
Show all changes
23 commits
Select commit
Hold shift + click to select a range
a40b73b
기능 목록 추가
kimseonggyu03 c069935
자동차 이름 입력 기능 추가
kimseonggyu03 0b7e82a
이동 횟수 입력 기능 추가
kimseonggyu03 4b579ff
자동차 이동 로직 추가
kimseonggyu03 75982a7
경기 진행 및 결과 출력 기능 추가
kimseonggyu03 c4b2b41
우승자 선정 기능 추가
kimseonggyu03 0a6a231
예외 처리 및 main() 함수 추가
kimseonggyu03 80eee98
테스트 통과를 위한 수정
kimseonggyu03 20bed73
최종 수정
kimseonggyu03 2e4f3e5
다시 수정
kimseonggyu03 71066ba
raise부분 수정
kimseonggyu03 e0aa6fb
공백 제거
kimseonggyu03 c323efc
PEP8 스타일에 맞춰 다시 코드
kimseonggyu03 f1b92ea
삼항연산자 제거
kimseonggyu03 4ab0a42
숫자상수 매직넘버상수로 전환
kimseonggyu03 f7d45ce
fix : 상수부분 수정
kimseonggyu03 6837570
fix: PEP8에 맞춰 수정
kimseonggyu03 22e727e
fix: test실패 부분 수정
kimseonggyu03 4ef52ec
수정
kimseonggyu03 a660e9f
1
kimseonggyu03 0b74e46
수정
kimseonggyu03 a99e7f6
fix: 8번째 줄 줄바꿈 추가
kimseonggyu03 eba3e99
fix: pytest 동과하게 수정
kimseonggyu03 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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` 발생 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,72 @@ | ||
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: | ||
if str(error) == "시도 횟수는 양의 정수여야 합니다.": | ||
raise | ||
raise ValueError("올바른 횟수를 입력하세요. (양의 정수)") from error | ||
|
||
|
||
def move_car(): | ||
if random.randint(0, RANDOM_MAX) >= THRESHOLD: | ||
return "-" | ||
return "" | ||
|
||
|
||
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(): | ||
""" | ||
프로그램의 진입점 함수. | ||
여기에서 전체 프로그램 로직을 시작합니다. | ||
""" | ||
# 프로그램의 메인 로직을 여기에 구현 | ||
print("프로그램이 시작되었습니다.") | ||
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 | ||
|
||
|
||
if __name__ == "__main__": | ||
# 프로그램이 직접 실행될 때만 main() 함수를 호출 | ||
main() |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
불필요한 빈 줄을 제거해주세요.
PEP8 스타일 가이드에 따라 불필요한 빈 줄을 제거해야 합니다.
RANDOM_MAX = 9 - def get_car_names():
📝 Committable suggestion