2017-12-10 1 views
1

Ich versuche, 3 Personen in die Liste einzuordnen, um die Ergebnisse für jede Person mit allen ihren Namen oben anzuzeigen, konnte aber nur ein Ergebnis ohne Namen erzielen :Aufruf eines Elements aus einer Warteschlangen-Datenstrukturliste (Python)

Contacting the following 
Phone answered: Yes 
Booked an appointment: No 
Reshedule an appointment again. 

ich möchte die alle ihre Namen und 3 gibt die Ausgabe machen angezeigt werden, eine für jede Person von innen 'names' gespeicherten Informationen, und jeder Name nicht zweimal erscheinen.

Ich möchte eine Warteschlange verwenden, um sie gemäß der Liste zu priorisieren, also versuche ich, sie in Ordnung zu bringen. Das if und elif sind Bedingungen, die in Abhängigkeit vom Zufallsgenerator in eine der Kategorien fallen. Nun ist es nur so, dass die Methode zum Einschließen der Namen nicht definiert ist.

-Code

import random 

class Queue: 
    def __init__(self): 
     self.container = [] 

    def isEmpty(self): 
     return self.size() == 0 

    def enqueue(self, item): 
     self.container.append(item) 

    def dequeue(self): 
     self.container.pop(0) 

    def size(self): 
     return len(self.container) 

    def peek(self) : 
     return self.container[0] 

names = ["Alvin", "James", "Peter"] 

# Enqueuing 

q = Queue() 
q.enqueue(random.choice(names)) 

# Dequeuing and Printing 
print("Contacting the following:\n" + "\n".join(q.container)) # unsure about this 




for i in range(q.size()): 

    answered = random.randint(0,1) 
    booked = random.randint(0, 1) 

    if(answered == 1 and booked == 1): 
     print("Now Calling -" + (q.names)) # unsure about this 
     print("Phone answered: Yes") 
     print("Booked an appointment: Yes") 
     print("Booking successful.") 

    elif(answered==1 and booked==0): 
     print("Now Calling -" + (q.names)) # unsure about this 
     print("Phone answered: Yes") 
     print("Booked an appointment: No") 
     print("Reshedule an appointment again.") 

    elif(answered == 0): 
     print("Now Calling -" + (q.names)) # unsure about this 
     print("Phone answered: No") 
     print("Reshedule a callback.") 

    q.dequeue() 

Beispiel gewünschte Ausgabe:

Contacting the following 
Alvin 
James 
Peter 

Now Calling - James 
Phone answered: No 
Reshedule a callback. 
+0

Ich war in der Mitte eine Antwort auf Ihre [vorherige Frage] Schreiben (https://stackoverflow.com/questions/47736687/Anzeigen-Namen-in-der-Liste-in-Warteschlange-Datenstruktur # 47736687) wenn Sie es gelöscht haben ... –

+0

Entschuldigung. Ich dachte, ich würde versuchen, es selbst herauszufinden. – John

Antwort

1

machte ich ein paar Änderungen an Ihrer Queue class. In erster Linie hat die Methode .dequeue das Objekt nicht zurückgegeben, das angezeigt wird. Daher wird der Standardwert None zurückgegeben.

Ich habe auch die .size Methode __len__ so können Sie Queue Instanzen auf die eingebaute in len Funktion übergeben. Und gab es eine iter Methode, die Sie problemlos in for Schleifen verwenden können, oder übergeben Sie es an .join. Ich änderte auch die .isEmpty zu .is_empty, um mit Pythons PEP-0008 Styleguide übereinzustimmen.

Da Sie wollen, dass jeder Name zufällig in die Warteschlange ohne Wiederholung hinzugefügt wird, wollen wir random.choice hier nicht. Stattdessen können wir random.shuffle verwenden; Eine andere Option ist die Verwendung von random.sample, obwohl dies besser geeignet ist, wenn Sie eine Teilauswahl aus einer Liste vornehmen möchten.

from random import seed, shuffle, randrange 

# Seed the randomizer so we can reproduce results while testing 
seed(9) 

class Queue: 
    def __init__(self): 
     self.container = [] 

    def __len__(self): 
     return len(self.container) 

    def is_empty(self): 
     return len(self) == 0 

    def enqueue(self, item): 
     self.container.append(item) 

    def dequeue(self): 
     return self.container.pop(0) 

    def peek(self) : 
     return self.container[0] 

    def __iter__(self): 
     return iter(self.container) 

names = ["Alvin", "James", "Peter"] 

# Enqueuing 
q = Queue() 

# Make a temporary copy of the names that we can 
# shuffle without affecting the original list 
temp = names.copy() 
shuffle(temp) 

# Put the shuffled names onto the queue 
for name in temp: 
    q.enqueue(name) 

# Dequeuing and Printing 
print("Contacting the following") 
print('\n'.join(q)) 
#for name in q: 
    #print(name) 

while not q.is_empty(): 
    name = q.dequeue() 
    print('\nNow Calling -', name) 

    answered = randrange(2) 
    booked = randrange(2) 

    if answered: 
     print("Phone answered: Yes") 
     if booked: 
      print("Booked an appointment: Yes") 
      print("Booking successful.") 
     else: 
      print("Booked an appointment: No") 
      print("Reshedule an appointment again.") 
    else: 
     print("Phone answered: No") 
     print("Reshedule a callback.") 

Ausgang

Contacting the following 
Alvin 
Peter 
James 

Now Calling - Alvin 
Phone answered: Yes 
Booked an appointment: No 
Reshedule an appointment again. 

Now Calling - Peter 
Phone answered: No 
Reshedule a callback. 

Now Calling - James 
Phone answered: Yes 
Booked an appointment: Yes 
Booking successful. 

In dem obigen Code benutzte ich

print('\n'.join(q)) 

alle Namen zu drucken, da Sie .join zu diesem Zweck in Ihrem Code verwenden. Aber ich zeigte auch die alternative Möglichkeit, eine einfache for Schleife, aber ich bemerkte es aus:

for name in q: 
    print(name) 
+0

in der Ausgabe zeigt es Alvin, Peter, James anstelle von 'Namen = [" Alvin "," James "," Peter "]' aus der Liste. Gibt es einen Weg, wie ich es ordnen kann? – John

+0

Auch ich bekomme immer die gleichen Ergebnisse, es scheint wie es sich mischt. – John

+0

@John Ihr Code verwendet 'random.choice', also dachte ich, dass Sie die Namen in einer zufälligen Reihenfolge der Warteschlange hinzufügen möchten.Wenn Sie möchten, dass die Namen in der ursprünglichen Reihenfolge in die Warteschlange eingereiht werden, dann fügen Sie einfach "Namen" in die Warteschlange ein und entfernen Sie den 'temp'-Kram. Mein Code verwendet 'random.shuffle', damit die Zufallsnamen nicht wiederholt werden. Es wählt die gleiche zufällige Reihenfolge bei jedem Lauf aus, da wir die Zufallszahl mit 'seed (9)' säen. Wenn Sie diese Zeile kommentieren, wird jedes Mal eine andere zufällige Reihenfolge gewählt. –

Verwandte Themen