此函数如何返回0而不是随机数

时间:2019-01-19 09:39:18

标签: python

基本上,我正在尝试创建一个上下浮动的函数,因为它从1-6中选择一个随机数。但是,它返回一堆0,而不是一个随机数列表。一直持续到到达一百层。

我已经尝试过将'f'变量的定义移到不同的位置以查看是否可行,并且我尝试更改了它计算是向上还是向下移动的方式。

Plugins

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

6 个答案:

答案 0 :(得分:2)

为什么得到零数组的简短答案是,每次循环时,您都要附加f的值,该值在代码中永远不变。尽早将其初始化为0,但从未更改。您将要写

f -= 1

f += 1

f += randint(1,6)

但是,还有更多错误需要纠正,这对于初学者来说很常见。例如,您写道:

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):

另外,在处理数字时,请避免使用is not,而应使用!=

这应该使您真正接近要寻找的东西。

答案 1 :(得分:1)

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

def roll():
f = 0
arry = []
count = 0
while count is not 100:
    numb = randint(1,6)
    if numb is 1 or 2: # this will always be true
        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
def roll():
f = 0
arry = []
count = 0
while count is not 100:
    numb = randint(1,6)
    if numb in (1, 2):
        f -= 1
    elif numb in (3, 4, 5):
        f += 1
    else:
        f += randint(1,6)
    count=count+1
    arry.append(f)
return arry

答案 2 :(得分:0)

您的问题是您永远不会为f分配新值。
写入f+1f-1不会更改f的值,但是会返回一个新值,该值等于f的正负1。
您应该写的是:

f = f+1
f = f-1

获得所需的结果。

答案 3 :(得分:0)

原因是您执行了操作

   let LinkAttributes = NSMutableDictionary(dictionary: testLink.linkAttributes)
   LinkAttributes[NSAttributedStringKey.underlineStyle] =  NSNumber(value: false)
   yourLabel.linkAttributes = LinkAttributes as NSDictionary as! [AnyHashable: Any]

相反,您应该这样做

    f-1
    f+1
    f + randint(1,6)

所以功能应该是

   f= f-1
   f= f+1
   f= f + randint(1,6)

希望有帮助

答案 4 :(得分:0)

您的代码应如下所示...问题已得到解释。

(..)

答案 5 :(得分:0)

其他人已经在解释为什么它无法按预期工作的原因,我想使用

添加它
while count is not 100:

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

x = 294
print(x is 294)

会产生False,因此要检查数字是否相同,应使用==运算符,并检查是否不相等的!=运算符,因此在您的情况下,while应该是:

while count != 100: