就業のためのPython学習3日目/将棋盤表示のコード

将棋盤を表示するコードを書いたら長くなりすぎてしまいました。
これを実行すると、将棋盤が表示されます。
打ちますか ?ときかれるので、yesを押すと、盤上どこにでも駒を置くことができます。相手方の駒はひらがなの頭文字になります。
駒を自由に移動することができますが、銀でも真横に動かすことができるので、(というよりもどこにでも移動することができる)まだ完成には程遠い感じですが、本を読みながら棋譜並べをすることができます。

この助長なコードを短く表現してみたいです。

banjyou = [
    [16, 17, 18, 19, 20, 19, 18, 17, 16],
    [0, 15, 0, 0, 0, 0, 0, 14, 0],
    [13, 13, 13, 13, 13, 13, 13, 13, 13],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0],
    [3, 3, 3, 3, 3, 3, 3, 3, 3],
    [0, 4, 0, 0, 0, 0, 0, 5, 0],
    [6, 7, 8, 9, 10, 9, 8, 7, 6],
]


#koma = {3:'歩',4:'角',5:'飛',6:'香',7:'桂',8:'銀',9:'金',10:"玉"}



teban = True



def idou():
    while True:
        print("駒を動かします")
        yoko = int(input("行数を選択してください"))
        tate = int(input("列数を選択してください"))
        tate -= 1
        yoko = -yoko  # 正しい符号に修正
    
        if banjyou[tate][yoko] == 0:
            print("そこは何もありません。")
        elif banjyou[tate][yoko] == 3:
            print("歩ですね良いですか?")
            ques=input('歩ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                
                banjyou[idou_tate][idou_yoko]=3
                banjyou[tate][yoko]=0
                break
        elif banjyou[tate][yoko] == 4:
            print("角ですね")
            ques=input('角ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1

                idou_yoko = -idou_yoko  # 正しい符号に修正
                
                banjyou[idou_tate][idou_yoko]=4
                banjyou[tate][yoko]=0
                break


        elif banjyou[tate][yoko] == 5:
            print("飛車ですね")
            ques=input('飛車ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=5
                banjyou[tate][yoko]=0
                break
        elif banjyou[tate][yoko] == 6:
            print("香車ですね")
            ques=input('香車ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=6
                banjyou[tate][yoko]=0
                break
        elif banjyou[tate][yoko] == 7:
            print("桂馬ですね")
            ques=input('桂馬ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=7
                banjyou[tate][yoko]=0
                break

        elif banjyou[tate][yoko] == 8:
            print("銀ですね")
            ques=input('銀ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=8
                banjyou[tate][yoko]=0
                break


        elif banjyou[tate][yoko] == 9:
            print("金ですね")
            ques=input('金ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=9
                banjyou[tate][yoko]=0
                break

        elif banjyou[tate][yoko] == 10:
            print("玉ですね")
            ques=input('玉ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=10
                banjyou[tate][yoko]=0
                break

        elif banjyou[tate][yoko] == 14:
            print("相手の角ですね")
            ques=input('相手の角ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=14
                banjyou[tate][yoko]=0
                break
        elif banjyou[tate][yoko] == 15:
            print("相手の飛車ですね")
            ques=input('相手の飛車ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=15
                banjyou[tate][yoko]=0
                break

        elif banjyou[tate][yoko] == 16:
            print("相手の香車ですね")
            ques=input('相手の飛車ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=16
                banjyou[tate][yoko]=0
                break


        elif banjyou[tate][yoko] == 17:
            print("相手の桂馬ですね")
            ques=input('相手の飛車ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=17
                banjyou[tate][yoko]=0
                break

        elif banjyou[tate][yoko] == 18:
            print("相手の銀ですね")
            ques=input('相手の銀ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=18
                banjyou[tate][yoko]=0
                break
        
        elif banjyou[tate][yoko] == 19:
            print("相手の金ですね")
            ques=input('相手の金ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=19
                banjyou[tate][yoko]=0
                break


        elif banjyou[tate][yoko] == 20:
            print("相手の玉ですね")
            ques=input('相手の玉ですね良いですか?y/yes')
            if ques=='y'or'yes':
                print('動かす場所を教えてください')
                idou_yoko = int(input("行数を選択してください"))
                idou_tate = int(input("列数を選択してください"))
                idou_tate -= 1
                idou_yoko = -idou_yoko  # 正しい符号に修正
                banjyou[idou_tate][idou_yoko]=20
                banjyou[tate][yoko]=0
                break


def draw():
    for row in banjyou:
        for piece in row:
            if piece == 0:
                print(' ', end=' ')
            elif piece == 3:
                print('歩', end=' ')
            elif piece == 4:
                print('角', end=' ')
            elif piece == 5:
                print('飛', end=' ')
            elif piece == 6:
                print('香', end=' ')
            elif piece == 7:
                print('桂', end=' ')
            elif piece == 8:
                print('銀', end=' ')
            elif piece == 9:
                print('金', end=' ')
            elif piece == 10:
                print('玉', end=' ')

            #相手のほう    
            elif piece == 13:
                print('ふ', end=' ')
            elif piece == 14:
                print('か', end=' ')
            elif piece == 15:
                print('ひ', end=' ')
            elif piece == 16:
                print('き', end=' ')
            elif piece == 17:
                print('け', end=' ')
            elif piece == 18:
                print('ぎ', end=' ')
            elif piece == 19:
                print('き', end=' ')
            elif piece == 20:
                print('お', end=' ')


        print()  # 行の終わりで改行

def utu():
    is_utu=input ("打ちますか?y/yes  ")
    if is_utu=='y'or is_utu=='yes':
        utu_yoko = int(input("行数を選択してください"))
        utu_tate = int(input("列数を選択してください"))
        utu_koma= input("打つ駒を指定してください")
        if utu_koma=='歩':
            banjyou[utu_tate][utu_yoko]==3
        elif utu_koma=='角':
            banjyou[utu_tate][utu_yoko]==4
        elif utu_koma=='飛':
            banjyou[utu_tate][utu_yoko]==5
        elif utu_koma=='香':
            banjyou[utu_tate][utu_yoko]==6
        elif utu_koma=='桂':
            banjyou[utu_tate][utu_yoko]==7
        elif utu_koma=='銀':
            banjyou[utu_tate][utu_yoko]==8
        elif utu_koma=='金':
            banjyou[utu_tate][utu_yoko]==9
        elif utu_koma=='玉':
            banjyou[utu_tate][utu_yoko]==10
        elif utu_koma=='ふ':
            banjyou[utu_tate][utu_yoko]==13
        elif utu_koma=='か':
            banjyou[utu_tate][utu_yoko]==14
        elif utu_koma=='ひ':
            banjyou[utu_tate][utu_yoko]==15
        elif utu_koma=='き':
            banjyou[utu_tate][utu_yoko]==16
        elif utu_koma=='け':
            banjyou[utu_tate][utu_yoko]==17
        elif utu_koma=='ぎ':
            banjyou[utu_tate][utu_yoko]==18
        elif utu_koma=='き':
            banjyou[utu_tate][utu_yoko]==19
        elif utu_koma=='お':
            banjyou[utu_tate][utu_yoko]==20

        utu_tate -= 1
        utu_yoko = -utu_yoko  

    else:
        print("打ちません")



if __name__ == '__main__':
    print('///////////////////////////////////')
    draw()
    print('///////////////////////////////////')

    while True:
        if teban:
            utu()
            idou()
            print('///////////////////////////////////')
            draw()
            #teban = False
            print('///////////////////////////////////')

この記事が気に入ったらサポートをしてみませんか?