아두맨 아이디어 창작소

아두맨

아이디어 창작 도우미

    코딩/Python

    [Python] 간단한 체스 나이트 이동 코드

    아두맨 2023. 4. 3. 20:20
    반응형

    체스 좌표를 입력하면 나이트가 이동할 수 있는 경우의 수를 결과로 보여주는 코드부터 보실게요.

     

    # Prompt user for input and validate it
    while True:
        input_data = input()
        if len(input_data) == 2 and input_data[1].isdigit() and input_data[0].isalpha() and 'a' <= input_data[0] <= 'h':
            break
        print('keep typing')
    
    # Convert input to row and column coordinates on chessboard
    row = int(input_data[1])
    column = ord(input_data[0]) - ord('a') + 1
    
    # Define list of steps a knight can make on the chessboard
    steps = [(-2,-1),(-2,1),(-1,-2),(-1,2),(1,-2),(1,2),(2,-1),(2,1)]
    
    # Count number of valid steps
    result = 0
    for step in steps:
        next_row = row + step[0]
        next_column = column + step[1]
    
        if 1 <= next_row <= 8 and 1 <= next_column <= 8:
            result += 1
    
    # Print result
    print(result)

     

    • 먼저 사용자로부터 알파벳과 숫자로 이루어진 두 글자를 입력받습니다. 이 때, 첫 글자는 알파벳 a부터 h 중 하나이어야 하고, 두 번째 글자는 1부터 8 중 하나의 숫자여야 합니다.
    • 입력받은 값을 좌표로 변환합니다. 첫 글자는 알파벳 a부터 h 중 하나이므로 아스키 코드 값을 이용해 1부터 8까지의 숫자로 변환하고, 두 번째 글자는 그대로 숫자로 변환합니다.
    • 나이트가 이동할 수 있는 경우의 수를 리스트로 정의합니다.
    • 이동할 수 있는 위치가 체스판 안에 있는지 확인하고, 있다면 결과 값에 1을 더합니다.
    • 결과 값을 출력합니다.

    코드를 자세히 분석해보겠습니다.

     

    while True:
        input_data = input()
        if len(input_data) == 2 and input_data[1].isdigit() and input_data[0].isalpha() and 'a' <= input_data[0] <= 'h':
            break
        print('keep typing')

    먼저 while 반복문을 사용하여, 사용자로부터 알파벳과 숫자로 이루어진 두 글자를 입력받습니다. 그리고 if 문을 사용하여 입력값이 2글자이고, 첫 번째 글자가 알파벳이며 a부터 h 중 하나이고, 두 번째 글자가 1부터 8 중 하나의 숫자인 경우에 반복문을 빠져나오도록 합니다. 그렇지 않으면 'keep typing'을 출력합니다.

     

    row = int(input_data[1])
    column = ord(input_data[0]) - ord('a') + 1

    입력값으로부터 행과 열 값을 추출하여 변수 row와 column에 저장합니다. 첫 번째 글자는 알파벳이므로 아스키 코드 값으로 변환한 뒤, 'a'의 아스키 코드 값을 빼서 1부터 8까지의 숫자로 변환합니다. 두 번째 글자는 그대로 정수형으로 변환합니다.

    steps = [(-2,-1),(-2,1),(-1,-2),(-1,2),(1,-2),(1,2),(2,-1),(2,1)]

    체스 나이트가 이동할 수 있는 경우의 수를 리스트로 정의합니다. 각 튜플은 (세로 이동 거리, 가로 이동 거리)로 구성되어 있습니다.

     

    result = 0
    for step in steps:
        next_row = row + step[0]
        next_column = column + step[1]
    
        if 1 <= next_row <= 8 and 1 <= next_column <= 8:
            result += 1

    나이트가 이동할 수 있는 위치를 하나씩 확인하며, 체스판 내에 있으면 결과 값 result에 1을 더합니다.

     

    예를 들어 'b4'을 입력해보겠습니다.

     

    아래와 같이 이동 가능한 위치는 6가지가 있으며 출력 결과는 '6'을 표시합니다. 

    • a2
    • a6
    • c2
    • c6
    • d3
    • d5

    반응형

    '코딩 > Python' 카테고리의 다른 글

    [python] 2중 리스트 기초 사용법  (2) 2023.04.09
    [python] strip().split() 사용하여 데이터 전처리 하는법  (0) 2023.04.09
    [python] 정규식 compile로 웹크롤링 데이터 불러오기  (0) 2023.04.06

    '코딩/Python'의 다른글

    • 현재글[Python] 간단한 체스 나이트 이동 코드

    관련글

    • [python] 2중 리스트 기초 사용법 2023.04.09
    • [python] strip().split() 사용하여 데이터 전처리 하는법 2023.04.09
    • [python] 정규식 compile로 웹크롤링 데이터 불러오기 2023.04.06
    프로필사진

    아이디어를 실현시켜드립니다!

    • 최신글 전체보기 (29)
      • 코딩 (10)
        • Python (4)
        • C# (6)
      • ESP32 (12)
        • 장치설정 (9)
        • 센서활용 (2)
        • ESP32 프로젝트 (1)
      • 아두이노 (4)
        • 장치설정 (3)
        • 아두이노 프로젝트 (1)
      • 라즈베리파이 (1)
        • 라즈베리파이 프로젝트 (1)
      • 블로그 관련 (1)

    최근글과 인기글

    • 최근글
    • 인기글

    공지사항

    Tag

    라즈베리파이, 2중리스트, 아두이노, Arduino, 아두이노 딥슬립, 시제품, c#, deepsleep, wokwi, 딥슬립, 2중 리스트, st7789, ESP32, 전력관리, 아두맨, 데이터, 의뢰, 웹, 개발, LED,

    최근댓글

    Copyright 아두맨. All rights reserved.

    티스토리툴바