奇随机.随机行为

2024-06-16 10:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个程序来创造一条蛇从屏幕上滑下来的样子。您可以按蛇向下移动的路径的宽度和长度进行传递。蛇在给定的宽度范围内随意移动

除了测试我的护栏以使蛇保持在规定的宽度内外,所有这些都可以很好地工作。我有时注意到蛇的位置(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)

Tags: pathposimportif宽度timespacerandom
1条回答
网友
1楼 · 发布于 2024-06-16 10:33:12

护栏的问题在于:

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)

问题是您使用的是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语句,如下所示:

if left_side == 0:
    left_side = left_side + random.randint(0, 1)
elif left_side == width:
    left_side = left_side + random.randint(-1, 0)
else:
    left_side = left_side + random.randint(-1, 1)

现在,如果满足第一个条件(left_side == 0),它将不会检查循环的同一迭代中是否有left_side == width,这意味着left_side不会在该迭代中减少

相关问题 更多 >