python - 在 Python 中解压的值太多

标签 python

<分区>

我正在尝试制作一款战舰游戏,但我一直停留在舰船生成阶段。 当我尝试运行它时:

初始化

print "Welcome to Battleships!!!"
board = []
import os
from random import randint

for x in range(10):
    board.append(["O"] * 10)

def print_board(board):
    for row in board:
        print " | ".join(row)

ships = {"battleship" : [5], "cruiser1" : [4], "cruiser2" : [4], "frigate1" : [3], "frigate2" : [3], "frigate3" : [3], "frigate4" : [3], "minesweeper1" : [2], "minesweeper2" : [2], "minesweeper3" : [2], "minesweeper4" : [2]}
numbers1 = []
numbers2 = []
numbers = []

一些设置函数

def setup_nums1():
    for count1 in range(6):
        for count2 in range(10):
            number1 = (count1)*100
            number2 = count2
            numbers1.append(number1 + number2)
def setup_nums2():
    for count1 in range(10):
        for count2 in range(6):
            number1 = (count1)*100
            number2 = count2
            numbers2.append(number1 + number2)
def setup_nums():
    for count1 in range(10):
        for count2 in range(10):
            number1 = (count1)*100
            number2 = count2
            numbers.append(number1 + number2)
def setup_numbers():
    setup_nums()
    setup_nums1()
    setup_nums2()
def setup_ships(): 
    x = 59 
    for ship, info in ships:
        direction = randint(1,2)
        if direction == 1:
            ships[ship].append(numbers1[randint (0,x)])
            y = info[1]
            print y
            numbers1.remove(y)
            if y in numbers2:
                numbers2.remove(y)
            numbers.remove(y)
            x = x - 1
            for n in range(ship[0]):
                ships[ship].append(y + n  + 1)
                numbers1.remove(y + n + 1)
                if (y + n + 1) in numbers2:
                    numbers2.remove(y + n + 1)
                numbers.remove(y + n + 1)
                x = x - 1                
        if direction == 2:
            ships[ship].append(numbers2[randint (0,x)])
            y = info[1]
            print y
            numbers2.remove(y)
            if y in numbers1:
                numbers1.remove(y)
            numbers.remove(y)
            x = x - 1
            for n in range(ship[0]):
                ships[ship].append(y + n*100  + 100)
                numbers2.remove(y + n*100 + 100)
                if (y + n + 1) in numbers1:
                    numbers1.remove(y + n*100 + 100)
                numbers.remove(y + n*100 + 100)  
                x = x - 1

主程序

setup_nums1()
setup_nums2()
setup_ships()
print numbers1
print numbers2
print ships

我收到这个错误:

Welcome to Battleships!!!
Traceback (most recent call last):
  File "/home/matthew/Documents/battleship2.py", line 77, in <module>
    setup_ships()
  File "/home/matthew/Documents/battleship2.py", line 41, in setup_ships
    for ship, info in ships:
ValueError: too many values to unpack

最佳答案

要解包的值太多意味着您正在调用的函数返回多个值,而您只处理其中的一些值。

问题出在

for ship, info in ships:

一定是这样

for ship, info in ships.items():

for ship, info in ships.iteritems():

关于python - 在 Python 中解压的值太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25032416/

相关文章:

python - 如何在 python 中使用正则表达式替换字符串的多个单词?

Python:在 while 循环中返回多个值的优雅方式

python - Django-Filer 规范 URL 无法正常工作(找不到页面)

python - 将 numpy 数组合并为单个 int

python - 为什么 sys.stdout.write() 显示字符串的长度?

python - 如何从 Python 2.7 中的 tell() 计数中排除\n 和\r

python - 将标签添加到双变量 kdeplot

python - Pandas - 在 pd.merge 时为缺失值添加 NaN

python - 如何防止 Celery 定期任务执行延迟?

Python/Matplotlib 子图 - 堆积条形图 - 为类别设置固定颜色