2014-04-01 42 views
1

你好我正在創建一個函數來返回一個字符串,這取決於字符串是什麼值,即a返回一個更高的數字。返回隨機等級w /特定百分比

+1

'print(auotgrader())'或'print(autograder())'?這是你的實際縮進嗎?代碼甚至不應該編譯。 – Hyperboreus

+0

@Hyperboreus我改變了它。但是這樣做更簡單嗎? – user3486852

+0

看到我的答案。 – Hyperboreus

回答

0

這可能是simplet,但並不多:

def autograder(): 
    bucket = random.randint (1, 100) 
    if bucket <= 45: 
     return randint (90, 100) 
    if bucket <= 80: 
     return randint (80, 89) 
    if bucket <= 95: 
     return randint (70, 79) 
    return randint (0, 69) 
1

UPDATE:

問題原本有代碼,查看修訂歷史記錄,這是一些語法修正他原來的代碼。

這裏有一對夫婦的我看到的語法問題,也有更簡單的方法,但如果你想知道你所擁有的東西,請參考其他的答案更簡單的實現方式的問題:

  1. 不要import randint你應該做的,而不是任:

    from random import randint 
    

    或:

    import random 
    

    ,當你永遠使用類似randint前綴,它random

    random.randint(0, 45) 
    
  2. 不要使用+=改用append方法爲:

    a.append(randint(0,45)) 
    
  3. 你不想random(a)代替你可能想要一個choice所以重寫它爲:

    random.choice(a) 
    
1
def gen_grade(): 
    ranges = [(90,100),(80,89),(70,79),(0,69)] 
    odds = [0.45,0.35,0.15,0.05] 
    rnd_key = random.random() 
    for i in range(len(odds)): 
     if rnd <= sum(odds[:i]): return random.randint(*ranges[i]) 

num_grades_to_gen = 25 
grades = [gen_grade() for i in range(num_grades_to_gen)] 

想必是我會怎麼做這

1

一個更清潔的方式來做到這一點是定義箱,只是有一個隨機數1-100。 then condition checking:

i = randint(0,100) 
if i in range(0,45): 
    return randint(90,100) 
elif i in range(45,80): 
    return randint(80,89) 
elif i in range(80,95): 
    return randint(70,79) 
else: 
    return randint(0,69)