11 svar
88 visningar
Shali_Mehr 284
Postad: 30 okt 13:23 Redigerad: 30 okt 13:24

Lösning för FAIL i swap funktionen: error on swap empty bag

Jag arbetar med en uppgift och har ett kvarstående testfel i min InventoryFunctions klass. Jag har försökt implementera logiken för att hantera en tom ryggsäck i min swap-funktion, men testet verkar förvänta sig ett felmeddelande istället för min specialhantering.

❌ Detaljer om testfelet

Testet som misslyckas är error on swap empty bag.

FAIL section: Your code produced wrong result! ======================================================================

Fails for InventoryFunctions

|Testar "swap" funktionen på en tom lista.

|Använder följande som argument:

|[], 'bread', 'butter'

|Förväntar att följande finns med i utskrift:

|'bread'

|Fick följande: |'Error\n'

logicbloke 8
Postad: 30 okt 13:37

Dela din kod så förstår vi bättre. 

thedifference 575
Postad: 30 okt 13:43
Shali_Mehr skrev:

men testet verkar förvänta sig ett felmeddelande istället för min specialhantering.

Det ser snarare ut som om det förväntar sig att se "bread" i resultatet, men att det får ett felmeddelande av din funktion. Som sagt, visa din kod. Använd {;}-knappen för att få den snyggt formatterad.

Shali_Mehr 284
Postad: 30 okt 13:50
thedifference skrev:
Shali_Mehr skrev:

men testet verkar förvänta sig ett felmeddelande istället för min specialhantering.

Det ser snarare ut som om det förväntar sig att se "bread" i resultatet, men att det får ett felmeddelande av din funktion. Som sagt, visa din kod. Använd {;}-knappen för att få den snyggt formatterad.

"""
=================
funktion: pick
lägger till ett föremål i ryggsäcken
om ingen position anges: lägger till sist
om position anges: lägger till på given plats om den är giltig
skriver ut bekräftelse eller felmeddelande
returnerar den uppdaterade ryggsäcken
=================
"""


def pick(bagpack, item, position=None):
    try:
        if position is None:
            bagpack.append(item)
            print(f"Du lade till '{item}' i ryggsäcken (sist).")
        else:
            pos = int(position)
            if pos < 0 or pos > len(bagpack):
                print(f"Error: position {pos} finns inte.")
                return bagpack
            bagpack.insert(pos, item)
            print(f"Du lade till '{item}' på position {pos}.")
    except ValueError:
        print(f"Error: ogiltig position '{position}'.")
    return bagpack


"""
=================
funktion: drop
tar bort ett specifikt föremål från ryggsäcken
om föremålet finns: tar bort det och bekräftar
om det inte finns: visar felmeddelande
returnerar den uppdaterade ryggsäcken
=================
"""


def drop(bagpack, item):
    try:
        bagpack.remove(item)
        print(f"Du slängde '{item}'.")
    except ValueError:
        print(f"Error: '{item}' finns inte i ryggsäcken.")
    return bagpack


"""
====================
funktion: swap
byter plats på två föremål i ryggsäcken
om ryggsäcken är tom: lägger till båda föremålen i given ordning
om båda finns: byter deras platser
om något saknas: visar felmeddelande för det saknade föremålet
skriver alltid ut bekräftelse eller fel
returnerar den uppdaterade ryggsäcken
====================
"""


def swap(bagpack, first, second):
    if len(bagpack) == 0:
        print(f"Error: föremålet '{first}' finns inte i ryggsäcken.")
        return bagpack

    try:
        i1 = bagpack.index(first)
        i2 = bagpack.index(second)
        bagpack[i1], bagpack[i2] = bagpack[i2], bagpack[i1]
        print(f"Bytte plats på '{first}' och '{second}'.")
    except ValueError:
        missing = first if first not in bagpack else second
        print(f"Error: föremålet '{missing}' finns inte i ryggsäcken.")
    return bagpack


def inventory(bagpack):
    if not bagpack:
        print("Ryggsäcken är tom")
        return
    print(f"Ryggsäcken innehåller {len(bagpack)} saker:")
    for i, item in enumerate(bagpack):
        print(f"{i}: {item}")
thedifference 575
Postad: 30 okt 13:58

Vad säger dina instruktioner? Jag tror inte det är fel på din logik, bara på utformningen av ditt felmeddelande. Det är lite märkligt eftersom den säger att du har ett radbyte ('\n'), men det har du ju inte. Din kod skriver ju ut:

Error: föremålet 'bread' finns inte i ryggsäcken.

Likväl klagar testet på att 'bread' saknas i utskriften. Det är inte så att du testar med annan kod än den du visat?

Shali_Mehr 284
Postad: 30 okt 14:06
thedifference skrev:

Vad säger dina instruktioner? Jag tror inte det är fel på din logik, bara på utformningen av ditt felmeddelande. Det är lite märkligt eftersom den säger att du har ett radbyte ('\n'), men det har du ju inte. Din kod skriver ju ut:

Error: föremålet 'bread' finns inte i ryggsäcken.

Likväl klagar testet på att 'bread' saknas i utskriften. Det är inte så att du testar med annan kod än den du visat?

det stämmer att jag uppdaterade koden's del, men ändå visar den fel meddelande i Github Action !

thedifference 575
Postad: 30 okt 14:11

Ok. Såvida ni inte har väldigt specifika instruktioner för hur felmeddelandet ska se ut så skulle jag säga att det är fel på testet och inte koden. Vad händer om du tar bort kolonet ur felmeddelandet?

Shali_Mehr 284
Postad: 30 okt 14:21

händer fortfarande inget

thedifference 575
Postad: 30 okt 14:22 Redigerad: 30 okt 14:28

Exakt samma felmeddelande? Vad händer om du bara printar 'bread'?

(med apostrofer)

Shali_Mehr 284
Postad: 30 okt 14:35 Redigerad: 30 okt 14:35
thedifference skrev:

Exakt samma felmeddelande? Vad händer om du bara printar 'bread'?

(med apostrofer)

jag tänkte kontrollera vad gör action i min github, och då visar den bara samma fel meddelande. tror att den uppdaterar inte eller?

print(f"Error: föremålet '{first}' finns inte i ryggsäcken.") 


# för att kontrollera så använde jag bara ett nytt namn som inte finns med i koden

print(f"{kontroll}") 
thedifference 575
Postad: 30 okt 18:22

Den där sista kommer krascha helt och hållet =)

Prova att köra testet manuellt. Gör anropet

swap([], 'bread', 'butter')

och se vad din kod svarar. Jag får som sagt

Error: föremålet 'bread' finns inte i ryggsäcken.

vilket bör tillfredsställa testet, och även om inte så är det inte Error och ett radbyte som testet påstår. Får du samma output som jag så får du påpeka för läraren att testet verkar vara felkonstruerat.

Jag har också provkört och tycker att funktionen returnerar vad den skall, åtminstone den kod du postat här. Är det inte den (ovan) du kört så kan jag förstås inte säga vad som kan vara fel.

Testet ser också OK ut. Källkoden finns här.

PS. Sedan skulle jag göra search/replace och byta 'bagpack' mot 'backpack', men det påverkar ju inte funktionen.

Svara
Close