|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
前面发了一个拼图的游戏bug,原帖地址:https://fishc.com.cn/thread-158703-1-2.html利用数字和一个空格模拟九宫格拼图,由于手残在手机上点了已解决,实际未解决,经过一晚上的尝试,又发现了新的问题,问题如下:
第一次运行成功,第二次失败,第三次成功
发现问题可能为index索引问题,问题语句为:
- list1[list1.index(" ")], list1[list1.index(chocie)] = list1[list1.index(chocie)],list1[list1.index(" ")]
复制代码
尝试将list1.index(" ")改为其他方式获得,例如:
- for i in range(9):
- if list[i]=" ":
- zero = i
复制代码
并将上述交换赋值语句改为:
- list1[list1.index(chocie)],list1[zero]=list1[zero], list1[list1.index(chocie)]
复制代码
问题可解决
但如果交换赋值语句的顺序颠倒为:
- list1[zero],list1[list1.index(chocie)]=list1[list1.index(chocie)], list1[zero]
复制代码
依旧会有问题,感觉是index索引的问题;但是无法理解问题的原因,求大神帮忙解决
附原程序:
- import random
- def print_chestable(foo): #定义打印格式,输出九宫格
- num=0
- for i in foo:
- num+=1
- if num%3==0:
- print(i)
- else:
- print(i, end=" ")
- def move(): #定义移动步骤
- global list1 #list1为产生九宫格的1-8,以及一个空格组成,格式如[6, ' ', 7, 8, 4, 3, 1, 5, 2]
- dict1={0:[1,3], 1:[0,2,4],2:[1,5],3:[0,4,6],4:[1,3,5,7],5:[2,4,8],6:[3,7],7:[4,6,8],8:[5,7]}
- #对空格位置周围出现的其他可移动位置的列表索引号进行编号
- chocie = int(input("请输入要移动的数字:")) #用户输入要移动的数字
- '''
- 判断用户输入要移动的数字是不是在空格周围可移动的的数字中,如果在:
- 交换空格位置和用户输入位置数字的值
- 返回新的列表
- 如果用户输入要移动的数字不在空格周围可移动的的数字中:
- 重新运行这个移动步骤
- '''
- if list1.index(chocie) in dict1[list1.index(" ")]:
- list1[list1.index(" ")], list1[list1.index(chocie)] = list1[list1.index(chocie)],list1[list1.index(" ")]
- return list1
- else:
- move()
- '''
- 定义游戏开始
- 进入循环
- 执行移动步骤并输出九宫格
- 如果排序正确
- 输出赢了
- 结束循环
- '''
- def game_bengin(bar):
- while True:
- print_chestable(move())
- if bar ==[1,2,3,4,5,6,7,8," "]:
- print("你赢了,牛逼")
- break
- list1=[i for i in range(1,9)] #产生[1,2,3,4,5,6,7,8]的列表
- list1.append(" ") #产生[1,2,3,4,5,6,7,8," "]的列表
- random.shuffle(list1) #产生[1,2,3,4,5,6,7,8," "]的洗牌后列表
- print_chestable(list1) #初始化
- game_bengin(list1) #运行游戏
复制代码
list1[list1.index(" ")], list1[list1.index(chocie)] = list1[list1.index(chocie)],list1[list1.index(" ")]这一步造成重复,
先执行list1[list1.index(" ")] = list1[list1.index(chocie)] (直接写chocie就行了)
再执行list1[list1.index(chocie)] = list1[list1.index(" ")] (直接写' '就行了)
造成了重复,因为空格已经改成了choice
建议改成
- if list1.index(chocie) in dict1[list1.index(" ")]:
- s_pos = list1.index(" ") #空格所在位置
- c_pos = list1.index(chocie) #输入数字所在的位置
- list1[s_pos] = chocie
- list1[c_pos] = ' '
- return list1
复制代码
|
|