Kmom02, lab2 övning 1.4 (simplifiable-if-statement)

  • Författare
  • Meddelande

axel.halldin

html-kodare

  • Inlägg: 19
  • Blev medlem: 02 sep 2017, 20:04

Kmom02, lab2 övning 1.4 (simplifiable-if-statement)

Inlägg09 sep 2017, 16:08

Har lite problem med ett errormeddelande från pylint vid validering.
# Exercise 1.4 (1 points)
#
# Create a variable `summer_word` containing the word 'beverage'.
#
# Answer with True if `summer_word` contains the letter 's' otherwise answer
# with False.
#
# Tip: Use the `in` operator.
#
# Write your code below and put the answer into the variable ANSWER.
#

Min lösning


Kod: Markera allt
summer_word = "beverage"
if summer_word in "s":
    result = True
else:
    result = False


ANSWER = result

När jag kör filen i Cygwin så fungerar det, får Correct, men när jag går in i kursrepot och validerar answer.py får jag detta fel-meddelande:

R:129, 0: The if statement can be replaced with 'var = bool(test)' (simplifiable-if-statement)

Nån som kan hjälpa mig på traven? :)
Online
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10982
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Kmom02, lab2 övning 1.4

Inlägg09 sep 2017, 16:33

Felet säger att du kan förenkla koden du skrivit och validatorn vill se något i stil med detta:
Kod: Markera allt
result = summer_word in "s"


Testet i if-satsen blir antingen false eller true och kan läggas i en variabel direkt. Validatorn ser att du skrivit en if-sats som kan ersättas med detta enklare uttryck.

Validatorn är smart. Men sammanhanget är inte rätt då det är en enkel labb med if-satser som skall övas. Vi behöver ändra uppgiften så att det blir en "bättre" kodlösning som validatorn också köper. Men i denna rundan så får vi troligen nöja oss med denna forumtråd som berättar hur man kan lösa det.

En annan variant hade varit att jag hade disablat just det testet i validatorn. Vi har disablat en hel del valideringstester redan. Du kan se dem i kursrepots fil .pylintrc:
https://github.com/dbwebb-se/python/blo ... /.pylintrc

Men jag undviker gärna att disabla för mycket. Just i denna frågan är jag dock kluven, kanske skall jag snabbt fixa till så att meddelandet disablas. Svårt val.

Men nu vet du hur det fungerar iallafall och alltid lärde vi oss något på det.
...
..:
.... /mos

axel.halldin

html-kodare

  • Inlägg: 19
  • Blev medlem: 02 sep 2017, 20:04

Re: Kmom02, lab2 övning 1.4

Inlägg09 sep 2017, 16:41

@mos
Tusen tack för snabbt och bra svar! :)
Användarvisningsbild

lrc

troubleshooter

  • Inlägg: 392
  • Blev medlem: 11 aug 2016, 21:38
  • Ort: Östersund

Re: Kmom02, lab2 övning 1.4

Inlägg09 sep 2017, 17:17

Notera dock att du har vänt på testet: nu kontrolleras det om "s" innehåller "beverage" och i just detta fall råkar även motsatsen överensstämma med svaret...
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Kmom02, lab2 övning 1.4 (simplifiable-if-statement)

Inlägg11 sep 2017, 10:40

Jag har märkt att felmeddelandet har motsatt effekt än vad pylint har i åtanke. Meddelandet hävdar att det finns lättare sätt att lösa problemet, det vill säga sätt som innebär mindre kod, färre tecken. Tyvärr är det många som tar sig runt felmeddelandet genom att skriva mer kod, som blir extra avancerad istället.

Den vanligaste lösningen, som kanske också är den som egentligen avses med uppgiften men som tyvärr inte uppskattas av pylint:
Kod: Markera allt
summer_word = "resort"
if "s" in summer_word:
   found = True
else:
   found = False

ANSWER = found



Den simpla lösningen som pylint avser:
Kod: Markera allt
summer_word = "resort"

ANSWER = bool("s" in summer_word)

Som faktiskt kan bli ännu enklare:
Kod: Markera allt
summer_word = "resort"

ANSWER = "s" in summer_word



En mer avancerad variant som ger rätt svar i labben och inte upptäcks av pylint:
Kod: Markera allt
summer_word = "resort"
found = False
for character in summer_word:
    if character == "s":
        found = True
        break

ANSWER = found


Som alltid så finns det många olika sätt att uppnå samma slutresultat. Det går att lära sig nya sätt att lösa problem på hela tiden, och med tiden lär man sig skilja bättre lösningar från sämre lösningar. Som nybörjare är det okej att vara nöjd bara det fungerar, det är huvudsaken att koden får fram det resultat man är ute efter.

Men när man får ett valideringsmeddelande som anser att något är simplifiable så kan man, om man vill, leta efter lösningar som innebär mindre kod. Eller så kan man värdera sin tid som alltför viktig för att slösa bort på att leta efter en nål i en höstack och nöja sig med en lösning som gör att man i alla fall kommer framåt. Det är en konstant balansgång för programmerare.

Vilka är online

Användare som besöker denna kategori: Google [Bot] och 20 gäster