| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
根据小甲鱼老师课后布置的自动动手写一个自己想写的东西。我准备写一个扫雷的小程序, 
但在pycharm打印调试时发现我的s2_list的值变动后s1_list的值也变了,但我s2_list并不是赋值而是切片来的啊! 
想了半天没想清楚,希望有大神解答?代码如下: 
- # sel: 级别选择     s1_list: 总的矩阵列表    s2_list:屏幕打印矩阵    landmine:地雷个数    all_c_list:所有坐标的列表
 
 - # landmine_list:地雷坐标的列表
 
  
- import easygui as g
 
 - import random
 
 - import pickle
 
  
 
- def sweeping():
 
 -     """
 
 -     开始游戏--选择级别--生成相符的矩阵--进入游戏--第一次点击-即输入坐标(检查输入是否合法)--随机生成一定数量的雷(第一次坐标处除外)
 
 -     --循环输入坐标开始扫雷(两种选择Y/N,选y输入坐标打开数字,选n输入坐标标记雷)--雷用‘@’符号显示--若打开了雷则游戏失败结束,显示后
 
 -     更新历史记录的数据--若最后未打开的坐标与雷数相同则游戏成功结束,显示后更新记录的数据--询问是否开始下一局--否定则退出游戏
 
 -     """
 
  
-     g.msgbox('欢迎来到木有界面的小游戏——扫雷(希望您能完成一次完整游戏)')
 
 -     while True:
 
 -         all_c_list = []    #可以选择的坐标列表
 
 -         sel = g.indexbox('请选择您的游戏级别', title='难度选择', choices=('低级(9×9,10个雷)', '中级(16×16,40个雷)', '高级(16×30,99个雷)'))
 
 -         if sel == 0:          # 根据选择来定义矩阵的大小
 
 -             x, y = 10, 10
 
 -             landmine = 9
 
 -         elif sel == 1:
 
 -             x, y = 17, 17
 
 -             landmine = 40
 
 -         else:
 
 -             x, y = 31, 17
 
 -             landmine = 99
 
 -         s1_list = matrix(x, y)   # 总的矩阵
 
 -         s2_list = s1_list[:]
 
  
-         for i in range(1, y):   # 将所有的坐标值传入可选择的坐标列表
 
 -             for j in range(1, x):
 
 -                 all_c_list.append(s1_list[i][j])      # 取得所有可用坐标,并放入列表
 
 -         x1, y1 = c_input(x, y)        # 获取输入坐标的值
 
 -         all_c_list.remove((x1, y1))    # 将第一次输入坐标删除  确保第一次无雷
 
 -         landmine_list = random.sample(all_c_list, landmine)   # 随机获得地雷坐标的列表
 
 -         for i in range(1, y):
 
 -             for j in range(1, x):
 
 -                 if (j, i) in landmine_list:
 
 -                     s2_list[i][j] = '■'
 
 -                 else:
 
 -                     s2_list[i][j] = '■'
 
 -         for i in range(y):      # 打印测试
 
 -             for j in range(x):
 
 -                 if (i == 0 and j < 10) or (j == 0 and i < 10):
 
 -                     print(s2_list[i][j], end='  ')
 
 -                 else:
 
 -                     print(s2_list[i][j], end=' ')
 
 -             print('\n')
 
 -         
 
 -     # file_list = pickle.load(open('历史记录.pkl', 'rb'))    # 读取历史数据存入sl_list列表中 [已玩游戏数, 胜利游戏数, 获胜占比]
 
  
 
- def matrix(x, y):
 
 -     """根据传入的参数定义矩阵,然后将矩阵返回"""
 
 -     matrix_list = []
 
 -     for i in range(y):
 
 -         matrix_list.append([])
 
 -         for j in range(x):
 
 -             matrix_list[i].append([])
 
 -     for i in range(y):
 
 -         for j in range(x):
 
 -             if i == 0:
 
 -                 matrix_list[i][j] = j
 
 -             elif j == 0:
 
 -                 matrix_list[i][j] = i
 
 -             else:
 
 -                 matrix_list[i][j] = (i, j)
 
 -     return matrix_list
 
  
- def c_input(x, y):
 
 -     """对输入坐标做判断"""
 
 -     while True:
 
 -         try:
 
 -             c_list = input('请输入坐标(x,y)(,号隔开):').split(',', 1)
 
 -             a = int(c_list[0])
 
 -             b = int(c_list[1])
 
 -             if (0 < a < x) and (0 < b < y):
 
 -                 break
 
 -             else:
 
 -                 continue
 
 -         except (EOFError, KeyboardInterrupt, ValueError):
 
 -             g.msgbox('您的输入有误')
 
 -     return a, b
 
 - sweeping()
 
  复制代码 |   
 
 
 
 |