8 svar
196 visningar
Qetsiyah är nöjd med hjälpen
Qetsiyah 6503 – Livehjälpare
Postad: 25 okt 2020 15:20 Redigerad: 25 okt 2020 15:26

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
Micimacko 4070
Postad: 25 okt 2020 16:25

Kan de mena att dina två första fel kan räknas som samma? Det är ju antagligen följdfel.

Laguna 28468
Postad: 25 okt 2020 16:33

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. 

farfarMats 1087
Postad: 25 okt 2020 16:53

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.

Laguna 28468
Postad: 25 okt 2020 17:18
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'.

Qetsiyah 6503 – Livehjälpare
Postad: 25 okt 2020 18:01

Så... vilket är felet som inte är fel?

Aerius 504 – Fd. Medlem
Postad: 25 okt 2020 18:26

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!

Lindehaven 820 – Lärare
Postad: 26 okt 2020 13:02
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:

  1. En slutparentes saknas på rad 2. Rätta det.
  2. 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)
  3. Ett citat-tecken saknas i print-satsen. Rätta det.
Skaft 2373 – F.d. Moderator
Postad: 27 okt 2020 18:18

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.

Svara Avbryt
Close