Vinnaren i pepparkakshustävlingen!
2016-01-29, 18:23
  #1
Medlem
Får en skitkonstig bugg som jag suttit och försökt felsöka ett bra tag, tycker jag lyckats isolera felet rätt bra men hittar fortfarande inte någon åtgärd som hjälper.

Koden ska printa en 'kortlek' (talen 1-13) i en särskild ordning som ett slags trolleritrick. De läggs in i en särskild blandning och printas i rätt ordning.

Problemet är att det sista kortet (talet) som printas blir 'None' eller 'Bugg' som jag satt det till nu. Se metoden dequeue i klassen LinkedQ.

Tacksam för hjälp!

Koden är följande:

Kod:
class Node:
    
def __init__(selfinit_data):
        
self.data init_data
        self
.next None

    def __str__
(self):
        return 
str(self.data)

    
def get_data(self):
        return 
self.data

    def get_next
(self):
        return 
self.next

    def set_data
(selfnew_data):
        
self.data newdata

    def set_next
(self,new_next):
        
self.next new_next

class LinkedQ:
    
def __init__(self):
        
self.lastNone
        self
.firstNone

    def is_empty
(self):
        if 
self.first == None:
            return 
True
        
else:
            return 
False

    def enqueue
(selfitem):
        
temp Node(item)
        if 
self.last == None:
            
self.first temp
            self
.last temp
        
else:
            
self.last.set_next(temp)
            
self.last temp

    def dequeue
(self):
        if 
self.first != None:
            
temp self.first.get_data()
            
self.first self.first.get_next()
            return 
temp
        
else:
            return 
'Bugg'


    
def get_first(self):
        return 
self.first

    def get_last
(self):
        return 
self.last

def sort_cards
():
    
cards '7 1 12 2 8 3 11 4 9 5 13 6 10'
    
cards cards.split()
    
cards = list(map(intcards))
    return 
cards

LinkedQ()

def queue_cards(cards):
    for 
i in cards:
        
q.enqueue(i)


def wizard():
    
ret = []
    while 
q.is_empty() == False:
        try:
            
q.dequeue()
            
q.enqueue(x)
            
q.dequeue()
            
ret.append(y)

        
except IndexError:
            return 
None
    
return ret

def main
():
    
LinkedQ()
    
cards sort_cards()
    
queue_cards(cards)
    
result wizard()
    print(
result)

main() 
Citera
2016-02-05, 15:07
  #2
Medlem
Meadowss avatar
Om du inte redan hittat lösningen..

I enqueue kollar du om self.last == None, men i dequeue sätter du self.first, det är bättre att kolla i enqueue ifall self.first == None.

Mycket möjligt att det finns fler buggar, skulle kolla igenom enqueue och dequeue och tänka på vad som händer vid insättning av första, och uttagning av sista framförallt om jag var du.

Lycka till.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback