2017-05-09 5 views
-1

Ich versuche, die Anzahl der gemeinsamen Elemente aus zwei zufällig ausgewählten Liste zu erhalten, wie Sie im Code am Ende dieses Beitrags sehen können.Wie bekomme ich einen festen Wert für die Zufallsfunktion?

Ein Problem ist, dass

print(count_matching_numbers(generate_numbers(), draw_winning_numbers())) 

das Ergebnis der obigen Druckfunktion, auf dem def basiert. Funktionen im Inneren des Druck einen unabhängig Ausgabe erzeugen, nicht von

def generate_numbers(): 
    result = random.sample(range(1, 46), 6) 
    result.sort() 
    return result 

oder

def draw_winning_numbers(): 
    win = generate_numbers() 
    for i in win: 
     bonus = random.randint(1, 45) 
     bonus not in win 
    win.append(bonus) 
    return win 

Auf den Punkt gebracht, würde ich eine feste Ausgangs von Zufallsfunktion bekommen. Was soll ich tun, um das Problem zu lösen?

Vielen Dank im Voraus!


import random 

def generate_numbers(): 
    result = random.sample(range(1, 46), 6) 
    result.sort() 
    return result 

def draw_winning_numbers(): 
    win = generate_numbers() 
    for i in win: 
     bonus = random.randint(1, 45) 
     bonus not in win 
    win.append(bonus) 
    return win 

def count_matching_numbers(list1, list2): 
    return len(set(list1) & set(list2)) 


print(generate_numbers()) 
print(draw_winning_numbers()) 
print(count_matching_numbers(generate_numbers(), draw_winning_numbers())) 
+2

Sie könnten a) Fest Code der Wert ist, oder b) setze den zufälligen Seed –

+0

@PaulH: oder c) benutze 'unittest.mock()' und patch 'sample' und' randint', um vorherbestimmte Zahlen zurückzugeben. Nicht so einfach wie das Setzen des Samens. –

+0

Aber vor allem sollte das OP die Funktionen nicht zweimal aufrufen. Verwenden Sie stattdessen Variablen. –

Antwort

1

Das Problem ist, dass das Innere drei print die Funktion unabhängig nennen. Sie könnten die Funktion Ergebnis zu einem gewissen Variablen zuweisen, dann übergeben Sie die Variable in die letzte Funktion wie folgt aus:

import random 

def generate_numbers(): 
    result = random.sample(range(1, 46), 6) 
    result.sort() 
    return result 

def draw_winning_numbers(): 
    win = generate_numbers() 
    for i in win: 
     bonus = random.randint(1, 45) 
     bonus not in win 
    win.append(bonus) 
    return win 

def count_matching_numbers(list1, list2): 
    return set(list1) & set(list2) 

from_generate = generate_numbers() # call function only once 
from_draw_winning = draw_winning_numbers() # call function only once 

print(from_generate) 
print(from_draw_winning) 
print(count_matching_numbers(from_generate, from_draw_winning)) 

ausgegeben:

[3, 16, 23, 24, 34, 35] 
[3, 11, 22, 23, 34, 39, 36] 
set([34, 3, 23]) 
Verwandte Themen