Utförande: Man ordnar i hemlighet korten enligt följande."
Ja, här bryter vi citatet ur Liberg: Trolleri för alla. I labbuppgiften
ingår nämligen att ta reda på kortkonstens hemlighet!
Du ska därför göra ett program som uppför sig så här:
Vilken ordning ligger korten i?
3 1 5 2 4
De kommer ut i denna ordning:
1 2 3 4 5
put(x)
, x=get()
och
isempty()
. Ditt huvudprogram ska klara sin uppgift med dessa
anrop, utan att bry sej om hur kön implementerats. Innan du tar itu med
kortkonsten kan du försöka få följande testprogram att fungera.
put(1) put(2) x=get() y=get() print x,y,isempty() # 1 2 True ska komma ut
Låt till en början kön finnas i samma fil test.py
som
huvudprogrammet, så man lätt kan se att
kön består av noder som innehåller ett tal och en pekare var.
Klassen node
kan stå överst i filen, sedan kan dom
globala köpekarna komma, sedan definieras put(x), get()
och
isempty()
och sist kommer huvudprogrammet.
Det är lite knepigt att programmera put(x)
eftersom
det blir två fall, beroende på om kön är tom eller inte. Det är
till stor hjälp att rita upp situationerna, så gör det.
När testprogrammet fungerar gör du om det så att det löser kortkonstens
gåta. Inmatningstips är att använda raw_input().split()
.
Experimentera sedan med olika inmatade ordningar och lös kortkonstens gåta!
Programmet konverserar också intelligent. Mata till exempel in
meningen
JAG GILLAR NÄR DU KRAMAR MEJ
.
first
och last
. Man vill till exempel
kunna flytta värden från en kö till en annan med
q1=Queue() q2=Queue() - - - x=q1.get() q1.put(x)Låt filen
queue.py
börja med class Queue:
och kopiera
över all kökod och nodklassen. Nu ska varje anrop ha en
self
-parameter och i stället för två globala pekare används
self.first
och self.last
.
Huvudprogrammet
lab2.py
börjar lämpligen med from queue import Queue
,
då förblir nämligen nodklassen osynlig.
first
på understa kortet och last
på översta.
För att slutligen skriva ut kortbunten uppifrån och ner måste man
alltså gå via stacken igen. Puh!
Misslyckad blandning: Korthajarnas riffelblandning går till så att leken delas på mitten och de båda halvlekarna rifflas ihop så att undre halvlekens översta kort hamnar överst och övre halvlekens understa kort hamnar underst. Ryktet säger att den här blandningen inte får göras för många gånger, för då är korten tillbaka i ursprunglig ordning. Kan det stämma?
För att programmera det här behöver du tre köer. Ditt program ska fråga efter antal kort (ett jämnt tal) och antal blandningar och skriva ut hur ordningen blir efteråt. Testa med 6 kort och tre blandningar eller 62 kort och sex blandningar. Hur många behövs för vår vanliga kortlek med 52 kort?