鱼C论坛

 找回密码
 立即注册
查看: 1895|回复: 2

[已解决]如何遍历二位列表?

[复制链接]
发表于 2023-6-29 21:32:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我希望能够遍历二位列表piece,从piece[0][0]到piece[2][2],该怎么办?
import random,os
xx = -114514
xy = -114514
ox = -114514
oy = -114514
piece = [
    [['-'],['-'],['-']],
    [['-'],['-'],['-']],
    [['-'],['-'],['-']],
    ]
def xxy():
    xx = int(input('请玩家一输入棋子的X坐标'))
    xy = int(input('请玩家一输入棋子的Y坐标'))
    if piece[ox][oy] == '✖' or piece[ox][oy] == '⬤':
        print('不可下子……')
        xxy()
    else:
        piece[xx][xy] = '✖'
def oxy():
    ox = int(input('请玩家一输入棋子的X坐标'))
    oy = int(input('请玩家一输入棋子的Y坐标'))
    if piece[ox][oy] == '✖' or piece[ox][oy] == '⬤':
        print('不可下子……')
        oxy()
    else:
        piece[ox][oy] = '⬤'
def draw():
#————————————————
    for i in range(piece):
#————————————————
        if i == '⬤':
            print('⬤')
        elif i == '✖':
            print('✖')
        elif i == '-':
            print('-')
    xxy()
    oxy()
run = True
while run == True:
    for mapx in range(3):
        for mapy in range(3):
            draw()
            print()
    os.system('clear')
最佳答案
2023-6-29 21:33:55
根据您的代码,遍历二维列表piece从piece[0][0]到piece[2][2]的方法如下:
# 导入模块
import random, os

# 声明变量和初始化列表
xx = -114514
xy = -114514
ox = -114514
oy = -114514
piece = [
    [['-'],['-'],['-']],
    [['-'],['-'],['-']],
    [['-'],['-'],['-']],
]

def xxy():
    global xx, xy  # 声明全局变量
    xx = int(input('请玩家一输入棋子的X坐标:'))
    xy = int(input('请玩家一输入棋子的Y坐标:'))
    if piece[xx][xy] == '✖' or piece[xx][xy] == '⬤':
        print('不可下子……')
        xxy()
    else:
        piece[xx][xy] = '✖'

def oxy():
    global ox, oy  # 声明全局变量
    ox = int(input('请玩家一输入棋子的X坐标:'))
    oy = int(input('请玩家一输入棋子的Y坐标:'))
    if piece[ox][oy] == '✖' or piece[ox][oy] == '⬤':
        print('不可下子……')
        oxy()
    else:
        piece[ox][oy] = '⬤'

def draw():
    os.system('clear')
    for row in piece:
        for col in row:
            print(col[0], end=' ')
        print()

def traverse_piece():
    for mapx in range(3):
        for mapy in range(3):
            draw()
            print()

# 主程序入口
run = True
while run:
    traverse_piece()
    xxy()
    oxy()

这样修改后,每次遍历二维列表piece时会先清空屏幕,然后打印整个棋盘,接着进行玩家输入并更新棋盘上的棋子位置。持续循环直到满足退出条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-29 21:33:55 | 显示全部楼层    本楼为最佳答案   
根据您的代码,遍历二维列表piece从piece[0][0]到piece[2][2]的方法如下:
# 导入模块
import random, os

# 声明变量和初始化列表
xx = -114514
xy = -114514
ox = -114514
oy = -114514
piece = [
    [['-'],['-'],['-']],
    [['-'],['-'],['-']],
    [['-'],['-'],['-']],
]

def xxy():
    global xx, xy  # 声明全局变量
    xx = int(input('请玩家一输入棋子的X坐标:'))
    xy = int(input('请玩家一输入棋子的Y坐标:'))
    if piece[xx][xy] == '✖' or piece[xx][xy] == '⬤':
        print('不可下子……')
        xxy()
    else:
        piece[xx][xy] = '✖'

def oxy():
    global ox, oy  # 声明全局变量
    ox = int(input('请玩家一输入棋子的X坐标:'))
    oy = int(input('请玩家一输入棋子的Y坐标:'))
    if piece[ox][oy] == '✖' or piece[ox][oy] == '⬤':
        print('不可下子……')
        oxy()
    else:
        piece[ox][oy] = '⬤'

def draw():
    os.system('clear')
    for row in piece:
        for col in row:
            print(col[0], end=' ')
        print()

def traverse_piece():
    for mapx in range(3):
        for mapy in range(3):
            draw()
            print()

# 主程序入口
run = True
while run:
    traverse_piece()
    xxy()
    oxy()

这样修改后,每次遍历二维列表piece时会先清空屏幕,然后打印整个棋盘,接着进行玩家输入并更新棋盘上的棋子位置。持续循环直到满足退出条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-29 21:41:07 | 显示全部楼层
看起来你在制作一个简单的井字游戏,你的代码需要一些调整才能正常工作。这是一个修复后的版本,你可以参考一下:
import os

piece = [
    ['-', '-', '-'],
    ['-', '-', '-'],
    ['-', '-', '-'],
]

def draw():
    for row in piece:
        for elem in row:
            print(elem, end=' ')
        print()

def place_piece(player):
    if player == 1:
        symbol = '✖'
    else:
        symbol = '⬤'

    while True:
        x = int(input('请玩家{}输入棋子的X坐标: '.format(player)))
        y = int(input('请玩家{}输入棋子的Y坐标: '.format(player)))
        
        if x < 0 or x > 2 or y < 0 or y > 2:
            print('无效坐标,请重新输入...')
        elif piece[x][y] != '-':
            print('该位置已经有棋子了,请重新输入...')
        else:
            piece[x][y] = symbol
            break

def game():
    player = 1
    while True:
        os.system('clear')  # 清屏
        draw()
        place_piece(player)
        player = 3 - player  # 交换玩家

game()
这个版本会交替让两位玩家输入他们想要放置棋子的位置,然后在指定的位置放置对应的棋子。在每一轮开始时,会显示当前的棋盘状态。棋盘的坐标是从0开始的,所以合法的输入范围是0-2。如果玩家输入了无效的坐标或者尝试在已经有棋子的位置放置棋子,代码会让他们重新输入。

这个版本还没有结束条件,所以游戏会无限继续下去,直到你手动停止。你可能需要添加一些代码来检查游戏是否结束(一名玩家获胜,或者棋盘已满)。

另外,这个版本使用的符号('&#10006;'和'&#11044;')可能在某些环境下无法正常显示。你可能需要将它们更换为其他的字符,比如'X'和'O'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 20:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表