簡體   English   中英

為什么這個函數返回 0 而不是隨機數

[英]How come this function returns 0s rather than random numbers

基本上,我正在嘗試創建一個上下樓層的函數,因為它從 1 - 6 中選擇一個隨機數。但是,它返回一堆 0 而不是隨機數列表。 一直持續到第100層。

我已經嘗試將 '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的值,該值在代碼中永遠不會改變。 它很早就被初始化為 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與數字,與使用時務!=來代替。

這應該讓你真正接近你正在尋找的東西。

你永遠不會修改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

您的問題是您永遠不會為f分配新值。
寫入f+1f-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

希望能幫助到你

你的代碼應該是這樣的...問題已經解釋過了。

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:

這里是不是最好的主意,在技術上它的工作原理,但is是不應該被用於整數值的比較,例如:

x = 294
print(x is 294)

將產生False ,因此為了檢查數字是否相同,您應該使用==運算符並檢查是否不相等!=運算符,因此在您的情況下, while應該是:

while count != 100:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM