2017-05-03 2 views
0

Das ist, was ich habe, so weit:Wie schreibe ich Code, der nur einmal eine Zufallszahl wiederholt?

import random 
for x in range(10): 
    tickets = [random.sample(range(0,59), 6)] 
    print (tickets) 

Aber ich muss es machen, so dass alle erzeugten Zahlen unterschiedlich mit Ausnahme von zwei Zahlen sind, die gleich sind.

Also das ist mein Problem und würde mich über Hilfe vor Freitag freuen! Dies ist die Frage, die mir als Referenz gestellt wurde: "Mein Neujahrsvorsatz ist es, im Lotto zu gewinnen. Dazu kaufe ich 10 Tickets pro Woche. Ich wähle 6 Nummern zufällig für jedes Ticket. Die Zahlen reichen von 1 bis 59 "Alle Zahlen können nur einmal verwendet werden, außer für eine, die dupliziert werden muss. Schreiben Sie ein Programm in Python, um dies zu simulieren."

+1

Vielleicht Mißverständnis ich bin. Könnten Sie 'random.shuffle (range (60))' nicht verwenden und diese Liste in 10 Unterlisten aufteilen? Die "außer zwei Zahlen, die gleich sind" ist mir nicht klar. – roganjosh

+1

Wie sieht die gewünschte Ausgabe genau aus? Momentan "drucke" du das Ergebnis einfach aus. Können Zahlen über Iterationen von "Tickets" hinweg wiederholt werden? – roganjosh

+0

jetzt kommt ich mit: [[50, 48, 12, 0, 4, 39]] [[17, 54, 53, 42, 5, 58]] [[7, 22, 38, 44, 48, 39]] [[39, 7, 22, 49, 4, 44]] [[31, 5, 29, 14, 18, 13]] [[50, 47, 11, 12, 6, 5]] [[43, 32, 31, 34, 0, 10]] [[49, 45, 56, 55, 58, 1]] [[53, 2, 21, 34, 9, 44]] ] [[49, 14, 0, 11, 57, 13]] aber mein Problem ist, dass einige Zahlen wie 49 und 50 wiederholt werden, aber meine Aufgabe ist, dass nur eine Nummer ein Duplikat haben darf, tut mir leid, dass ich sie nicht gemacht habe so klar und hoffentlich habe ich einen besseren Job gemacht! –

Antwort

1

Sie Zahlen vermeiden können, indem sie den Überblick über die wiederholt die verwendet wurden, und sie in späteren Proben disallowing:

import random 

def non_repeating_random_sample(population, k, seen): 
    while True: 
     sample = random.sample(population, k) 
     if not any(number in seen for number in sample): 
      seen.union(sample) 
      return sample 

seen = set() 
for _ in range(10): 
    tickets = [non_repeating_random_sample(range(0, 59), 6, seen)] 
    print(tickets) 

Wenn so etwas wie dies zu tun, kann es wichtig sein, zu verstehen, dass die Proben zurück-Ausnahme für die erste - sind nicht wirklich zufällig wegen der zusätzlichen Zurückhaltung.

Unabhängig davon, wäre es einfacher und schneller sein, nur die gesamte Bevölkerung zu mischen, und extrahieren Gruppen von der gewünschten Größe von ihm:

import random 

number_of_samples = 10 
number_per_sample = 6 

samples = list(range(number_of_samples*number_per_sample)) 
random.shuffle(samples) 

generator = zip(*[iter(samples)]*number_per_sample) 
for _ in range(number_of_samples): 
    print(list(next(generator))) 
Verwandte Themen