所以我创建了一个简单的战舰程序。我对一个玩家放置他们的船感到有点沮丧。我想要的是函数ship\u place()将船作为参数,请求玩家想要放置船的数组的索引,然后从指定的索引开始将船放置在海洋中。我希望船上的内容(这是一个列表)被“导出”到海洋(这也是一个列表)。你知道吗
我创建了这个函数,它给了我两个错误。首先,出于某种原因,它将整个boat数组放入指定的索引中。第二个问题是,列表中的拍摄点1并没有接收到它应该接收的所有拍摄点。你知道吗
另外,我最初在函数中有for循环,但是得到了相同的错误,所以我尝试while循环,看看是否有什么变化。什么都没做。你知道吗
ocean = ['O']*100
taken_spots1 = []
boat1 = ['<','>'],
boat2 = ['<','=','>'],
boat3 = ['<','::','>'],
boat4 = ['<','@','@','>'], #cannons
boat5 = ['<','G','U','N','>']
ship_yard = [boat1,boat2,boat3,boat4,boat5]
def ship_place(boat):
spot = ""
while spot == "":
spot = input("Place a boat: ")
spot = eval(spot)
if spot in taken_spots1:
spot = ""
print("That spot's already taken, dummy")
else:
j=0
while j < len(boat):
taken_spots1.append(spot + j)
j += 1
i = 0
while i < len(boat):
ocean[spot - 1 + i] = boat[i]
i += 1
for i in range(5):
ship_place(ship_yard[i])
print(ocean)
print(taken_spots1)
你的程序几乎是正确的!问题是在一些船后面有多余的逗号。你知道吗
例如:
去掉逗号。你知道吗
这有点令人惊讶,但在Python中,当您添加逗号时,会得到一个“tuple”。通常我们看到元组是这样写的:
这将是一个长度为2的元组,值为
1
和3
。但您可以声明一个长度为1的元组,这是合法的:结果发现括号不是必需的:
你就是这么做的。您声明了一个长度为1的元组,其内容是一个列表。然后,当函数收到它的参数
boat
时,它收到一个长度为1的元组,当它为元组编制索引时,它得到一个列表。你知道吗另外,你可以用“切片”做你想做的事。对列表进行切片时,可以指定其中的某个部分;如果指定给该部分,则替换该部分。你知道吗
你用这个循环把一艘船放到海里:
可以用以下代码替换循环:
你甚至可以写一行字,但我认为它太难阅读和理解。你知道吗
如果我写这个程序,我不会维护
taken_spots
列表和ocean
。我只想看看大海里是否已经有船了。现在你可能有一个潜在的问题,taken_spots
是不准确的;海洋总是它是什么,所以看它消除了一个潜在的细菌来源。你知道吗这里有一种方法,你可以看看海洋,看看一艘船是否适合在一个地点。你知道吗
如果您刚开始使用Python,您可能还没有了解
any()
和all()
函数。。。但是它们提供了一种非常方便的方法来编写spot_taken()
。像这样:你甚至可以把它做成一行,但可能还是太难看了:
如果这看起来太奇怪或棘手,暂时忽略它。你最终会学会的。但是
any()
和all()
是Python中我最喜欢的特性之一,所以我只想和大家分享一下!你知道吗p.p.p.S.在调试时,向
print()
添加调用并确保值是您期望的值通常是有用的。当我打印boat
的值时,它被打印成一个元组:(['<', '>'],)
,我就是这样计算出来的。你知道吗有一个调试器也很方便,它允许您检查变量、检查它们的类型等,而不需要编写
print()
语句。我用过WingWare IDE,它有一个免费的版本,你可能想看看。http://wingware.com/好了,我们开始吧,这应该管用:
样本运行:
相关问题 更多 >
编程相关推荐