Python 为什么这个函数返回0而不是随机数

Python 为什么这个函数返回0而不是随机数,python,Python,基本上,我试图创建一个上下楼层的函数,因为它从1-6中选择一个随机数。但是,它返回一组0,而不是一组随机数。这个过程一直持续到第一百层 我已经尝试过将“f”变量的定义移动到不同的位置,看看这是否有效,并且尝试改变它计算是否向上或向下移动地板的方式 def roll(): f=0 arry = [] count = 0 while count is not 100: numb = randint(1,6) if numb is 1 or 2: f-1 eli

基本上,我试图创建一个上下楼层的函数,因为它从1-6中选择一个随机数。但是,它返回一组0,而不是一组随机数。这个过程一直持续到第一百层

我已经尝试过将“f”变量的定义移动到不同的位置,看看这是否有效,并且尝试改变它计算是否向上或向下移动地板的方式

def roll():
f=0
arry = []
count = 0
while count is not 100:
    numb = randint(1,6)
    if numb is 1 or 2:
        f-1
    elif numb is 3 or 4 or 5:
        f+1
    else:
        f + randint(1,6)
    count=count+1
    arry.append(f)
return arry

实际结果应该是一系列随机数,但我得到的是一堆0。

您永远不会修改
f
。不过,您的代码还有许多其他问题

def roll():
f=0
arry=[]
计数=0
当计数不是100时:
numb=randint(1,6)
如果numb为1或2:#这将始终为真
f-=1
如果numb为3、4或5:
f+=1
其他:
f+=randint(1,6)
计数=计数+1
arry.append(f)
回程
def roll():
f=0
arry=[]
计数=0
当计数不是100时:
numb=randint(1,6)
如果在(1,2)中麻木:
f-=1
elif numb in(3,4,5):
f+=1
其他:
f+=randint(1,6)
计数=计数+1
arry.append(f)
回程

您的问题是您从未将新值分配给
f

写入
f+1
f-1
不会更改
f
的值,而是返回一个新值,该值等于
f
的值加上或减去1。
你应该写的是:

f=f+1
f=f-1

为了得到你想要的结果

原因是您执行了这些操作

    f-1
    f+1
    f + randint(1,6)
相反,你应该这样做

   f= f-1
   f= f+1
   f= f + randint(1,6)
所以函数应该是

def roll():
f=0
arry = []
count = 0
while count is not 100:
    numb = randint(1,6)
    if numb is 1 or 2:
        f=f-1
    elif numb is 3 or 4 or 5:
        f=f+1
    else:
        f=f + randint(1,6)
    count=count+1
    arry.append(f)
return arry

希望它有帮助

为什么会得到一个零数组的简短答案是,每次通过循环时,都会附加
f
的值,这在代码中永远不会改变。它在早期初始化为0,但从未更改。你会想写的

f -= 1

然而,还有一些错误需要纠正,这对于初学者来说是很常见的。例如,您写道:

if numb is 1 or 2:
这将始终是
True
,因为在Python中,这与:

if (numb is 1) or 2:
你应该写:

if numb == 1 or numb == 2:
甚至:

if numb in (1, 2):
对下一个条件执行相同的操作,例如:

if numb in (3, 4, 5):
x = 294
print(x is 294)
另外,在处理数字时要避免
不是
,并使用
=取而代之


这将使您非常接近所要查找的内容。

您的代码应该如下所示。。。问题已经解释过了

import random

def roll():
    f=0
    arry = []
    count = 0
    while count is not 100:
        numb = random.randint(1,6)
        if numb == 1 or numb == 2:
            f -= 1
        elif numb == 3 or numb == 4 or numb == 5:
            f += 1
        else:
            f = f + random.randint(1,6)
        count += 1
        arry.append(f)
    return arry
roll = roll()
print(roll)

其他人已经解释了为什么它不能按预期工作,我想用

while count is not 100:
这里不是最好的主意,从技术上讲它是可行的,但是
是不应该用于整数值比较的,例如:

if numb in (3, 4, 5):
x = 294
print(x is 294)
将产生
False
,因此要检查数字是否相同,应使用
=
运算符并检查是否不相等
=运算符,因此在您的情况下,
while
应为:

while count != 100:

很棒的阅读:我也会在计数时使用
。如果计数不为n,则循环不会中断,如果计数为256,则循环不会中断。为什么?或者只是我的机器。。