我写了一个程序来创造一条蛇从屏幕上滑下来的样子。您可以按蛇向下移动的路径的宽度和长度进行传递。蛇在给定的宽度范围内随意移动
除了测试我的护栏以使蛇保持在规定的宽度内外,所有这些都可以很好地工作。我有时注意到蛇的位置(left_side
)似乎可以变为负值。假设我有一个护栏,当left_side
==0时,它应该只能向右移动,如果该条件为真,我可以添加的唯一值应该是0或1
我该如何解决这个问题
我的代码:
import random
import time
def path(path_width, snake_pos):
path = ""
for space in range(path_width + 1):
if space == 0:
path = path + "|"
if space == snake_pos:
path = path + "()"
if space == width:
path = path + "|"
else:
path = path + " "
return path
width = int(input("How wide is your course? "))
length = int(input("How long is your course? "))
left_side = random.randint(1, width -1)
i=1
while i < length:
if left_side == 0:
left_side = left_side + random.randint(0, 1)
if left_side == width:
left_side = left_side + random.randint(-1, 0)
else:
left_side = left_side + random.randint(-1, 1)
print(path(width, left_side) + " : leftside = " + str(left_side))
i += 1
time.sleep(.05)
护栏的问题在于:
问题是您使用的是
if
/if
/else
工作流;如果满足第一个if
条件,它将在中执行代码,然后检查第二个if
语句并执行该代码或附加的else
块中的代码下面是代码的当前工作流:它检查
left_side
是否为0,如果是,则将0或1添加到left_side
。然后检查left_side
是否等于width
。如果是,则将-1或0添加到left_side
。如果不是,则将执行else
语句,并将-1、0或1添加到left_side
这意味着循环的每个迭代
left_side
都有可能减少一次,因为它下面的第二个if
块或else
块将执行每个迭代,而这两个块中的random.randint
语句都有可能计算为-1解决方案只是将第二个
if
语句更改为elif
语句,如下所示:现在,如果满足第一个条件(
left_side == 0
),它将不会检查循环的同一迭代中是否有left_side == width
,这意味着left_side
不会在该迭代中减少相关问题 更多 >
编程相关推荐