鱼C论坛

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

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

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

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

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

x
我希望能够遍历二位列表piece,从piece[0][0]到piece[2][2],该怎么办?
  1. import random,os
  2. xx = -114514
  3. xy = -114514
  4. ox = -114514
  5. oy = -114514
  6. piece = [
  7.     [['-'],['-'],['-']],
  8.     [['-'],['-'],['-']],
  9.     [['-'],['-'],['-']],
  10.     ]
  11. def xxy():
  12.     xx = int(input('请玩家一输入棋子的X坐标'))
  13.     xy = int(input('请玩家一输入棋子的Y坐标'))
  14.     if piece[ox][oy] == '✖' or piece[ox][oy] == '⬤':
  15.         print('不可下子……')
  16.         xxy()
  17.     else:
  18.         piece[xx][xy] = '✖'
  19. def oxy():
  20.     ox = int(input('请玩家一输入棋子的X坐标'))
  21.     oy = int(input('请玩家一输入棋子的Y坐标'))
  22.     if piece[ox][oy] == '✖' or piece[ox][oy] == '⬤':
  23.         print('不可下子……')
  24.         oxy()
  25.     else:
  26.         piece[ox][oy] = '⬤'
  27. def draw():
  28. #————————————————
  29.     for i in range(piece):
  30. #————————————————
  31.         if i == '⬤':
  32.             print('⬤')
  33.         elif i == '✖':
  34.             print('✖')
  35.         elif i == '-':
  36.             print('-')
  37.     xxy()
  38.     oxy()
  39. run = True
  40. while run == True:
  41.     for mapx in range(3):
  42.         for mapy in range(3):
  43.             draw()
  44.             print()
  45.     os.system('clear')






复制代码
最佳答案
2023-6-29 21:33:55
根据您的代码,遍历二维列表piece从piece[0][0]到piece[2][2]的方法如下:

  1. # 导入模块
  2. import random, os

  3. # 声明变量和初始化列表
  4. xx = -114514
  5. xy = -114514
  6. ox = -114514
  7. oy = -114514
  8. piece = [
  9.     [['-'],['-'],['-']],
  10.     [['-'],['-'],['-']],
  11.     [['-'],['-'],['-']],
  12. ]

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

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

  31. def draw():
  32.     os.system('clear')
  33.     for row in piece:
  34.         for col in row:
  35.             print(col[0], end=' ')
  36.         print()

  37. def traverse_piece():
  38.     for mapx in range(3):
  39.         for mapy in range(3):
  40.             draw()
  41.             print()

  42. # 主程序入口
  43. run = True
  44. while run:
  45.     traverse_piece()
  46.     xxy()
  47.     oxy()
复制代码


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

使用道具 举报

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

  1. # 导入模块
  2. import random, os

  3. # 声明变量和初始化列表
  4. xx = -114514
  5. xy = -114514
  6. ox = -114514
  7. oy = -114514
  8. piece = [
  9.     [['-'],['-'],['-']],
  10.     [['-'],['-'],['-']],
  11.     [['-'],['-'],['-']],
  12. ]

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

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

  31. def draw():
  32.     os.system('clear')
  33.     for row in piece:
  34.         for col in row:
  35.             print(col[0], end=' ')
  36.         print()

  37. def traverse_piece():
  38.     for mapx in range(3):
  39.         for mapy in range(3):
  40.             draw()
  41.             print()

  42. # 主程序入口
  43. run = True
  44. while run:
  45.     traverse_piece()
  46.     xxy()
  47.     oxy()
复制代码


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

使用道具 举报

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

  1. import os

  2. piece = [
  3.     ['-', '-', '-'],
  4.     ['-', '-', '-'],
  5.     ['-', '-', '-'],
  6. ]

  7. def draw():
  8.     for row in piece:
  9.         for elem in row:
  10.             print(elem, end=' ')
  11.         print()

  12. def place_piece(player):
  13.     if player == 1:
  14.         symbol = '✖'
  15.     else:
  16.         symbol = '⬤'

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

  28. def game():
  29.     player = 1
  30.     while True:
  31.         os.system('clear')  # 清屏
  32.         draw()
  33.         place_piece(player)
  34.         player = 3 - player  # 交换玩家

  35. game()
复制代码

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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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