Hitta antal syntaxfel i ett kort program
Hej, se:
Jag ser 4 fel, men facit säger "3 eller 4". Vad menas?
- Rad 4 inte indenterad
- inget kolon i slutet av rad 3
- saknas ett till citattecken i printen
- en parantes för lite på rad 2
Kan de mena att dina två första fel kan räknas som samma? Det är ju antagligen följdfel.
Följdfel skulle betyda att om man rättar det första så försvinner det andra, och så är det ju inte.
Däremot kan väl båda felen vara en följd av samma tankemisstag.
Kanske tillåter syntaxen ett tomt statement ?
I så fall så blir indentationen ok om man sätter ett kolon på if-satsen men då blir print ovillkorligt utförd vilket naturligyvis är fel men inte syntaxfel.
matsC skrev:Kanske tillåter syntaxen ett tomt statement ?
I så fall så blir indentationen ok om man sätter ett kolon på if-satsen men då blir print ovillkorligt utförd vilket naturligyvis är fel men inte syntaxfel.
Nej, det måste stå någonting där. När man inte vill utföra något kan man använda nyckelordet 'pass'.
Så... vilket är felet som inte är fel?
Antag att indenteringen egentligen inte ska vara ett fel. Indenteringsfelet är bara ett kopieringsfel av uppgiften. Vi tänker oss därför att vi har
1 """Programmet frågar om..."""
2 age = int(input("Skriv in din ålder.")
3 if age >= 18
4 print("Du skrev att du är 18 eller äldre!)
På rad 4 saknas citattecken på slutet,
på rad 3 saknas kolon,
på rad 2 saknas parentes på slutet. Det blir tre fel.
Om vi istället på rad två säger att 'int(' är fel så vi tar bort det, det är ett fel,
nu på rad tre har vi två fel, age är en string som inte kan jämföras med 18 samt inget kolon på slutet.
Rad fyra saknar avslutande citattecken. Det ger fyra fel.
Om indenteringen är ett fel då har vi 4 eller 5 fel. Men det beror ju lite på hur man tolkar uppgiften. Att ta bort 'int(' på rad 1
ser inte vettigt ut om man jämför med if-satsen. Det måste finnas ett bättre sätt!
Aerius skrev:Om vi istället på rad två säger att 'int(' är fel så vi tar bort det, det är ett fel,
nu på rad tre har vi två fel, age är en string som inte kan jämföras med 18 samt inget kolon på slutet.
Ja, det är två fel, men endast ett av dem är SyntaxError. Det andra blir ett TypeError vid exekvering.
Rad fyra saknar avslutande citattecken. Det ger fyra fel.
Om indenteringen är ett fel då har vi 4 eller 5 fel. Men det beror ju lite på hur man tolkar uppgiften.
Att ta bort 'int(' på rad 1 ser inte vettigt ut om man jämför med if-satsen. Det måste finnas ett bättre sätt!
Mitt förslag för att anse detta innehålla tre SyntaxError:
- En slutparentes saknas på rad 2. Rätta det.
- Ett kolon saknas på rad 3. Rätta det och ta samtidigt bort nyrads-tecknet (line feed) så att print-satsen ligger på rad 3. Det blir helt korrekt syntax. (Om man låter print-satsen ligga kvar på rad 4 så har man dock ytterligare ett SyntaxError att rätta)
- Ett citat-tecken saknas i print-satsen. Rätta det.
Min tanke är att du hittat alla fyra fel, men att man skulle kunna klassificera felen olika. IndentationError är en egen feltyp (om än en subklass till SyntaxError). Så "3 eller 4" har man nog skrivit för att inte ge fel till någon som säger "3 SyntaxError och 1 IndentationError". Det vore ju korrekt, även om detta också är 4 SyntaxError pga underkategori.