Vinnaren i pepparkakshustävlingen!
2017-03-27, 23:03
  #1405
Medlem
Citat:
Ursprungligen postat av innesko
Nej man ska inte ta bort felmeddelandet. Utan man ska helt enkelt göra så att det blir ett felmeddelande. Det blir det visserligen även om man ignorerar att koden kraschar om man skickar in en tom lista, men man kan göra så att det blir lite snyggare iaf. Så om man lägger
if not lst: raise Exception('The list is empty.')
högst upp i funktionen så kommer du få ett felmeddelande om att listan är tom när du försöker anropa funktionen med en tom lista. Men detta känns som överkurs om ni inte har gått igenom något sånt här och man kan troligtvis bara låta koden krascha om man skickar in en tom lista, men man bör vara medveten om att den gör det.

Tack!
Citera
2017-03-28, 06:41
  #1406
Medlem
Citat:
Ursprungligen postat av innesko
Nej man ska inte ta bort felmeddelandet. Utan man ska helt enkelt göra så att det blir ett felmeddelande. Det blir det visserligen även om man ignorerar att koden kraschar om man skickar in en tom lista, men man kan göra så att det blir lite snyggare iaf. Så om man lägger
if not lst: raise Exception('The list is empty.')
högst upp i funktionen så kommer du få ett felmeddelande om att listan är tom när du försöker anropa funktionen med en tom lista. Men detta känns som överkurs om ni inte har gått igenom något sånt här och man kan troligtvis bara låta koden krascha om man skickar in en tom lista, men man bör vara medveten om att den gör det.

Python brukar dock köra med att hellre få till ett exeption än att kolla ifall saker och ting stämmer, för du och användaren vet ju själv vad som ska hända. Varför kolla för ett fel som aldrig kommer att hända i 99 av 100 fall, istället för att bara fånga det den 100e gånger. T.ex.

99 gånger så är inte listan tom.
99 gånger finns filen du försöker öppna.
Osv.

Better to ask for forgiveness.
Citera
2017-03-28, 10:31
  #1407
Medlem
inneskos avatar
Citat:
Ursprungligen postat av Gottisborgen
Python brukar dock köra med att hellre få till ett exeption än att kolla ifall saker och ting stämmer, för du och användaren vet ju själv vad som ska hända. Varför kolla för ett fel som aldrig kommer att hända i 99 av 100 fall, istället för att bara fånga det den 100e gånger. T.ex.

99 gånger så är inte listan tom.
99 gånger finns filen du försöker öppna.
Osv.

Better to ask for forgiveness.

Fast vad talar du om nu, är det att kasta exceptions som inte är normalt i python, eller är det att fånga dom? I detta fall kanske det inte är jätte relevant att kasta ett exception, det kan jag hålla med om, eftersom det ändå kommer att kastas ett exception samt att det inte är så svårt att förstå varför det kastas. Men att aldrig kasta exceptions kan ju inte vara hälsosamt?
Citera
2017-03-29, 06:36
  #1408
Medlem
Citat:
Ursprungligen postat av innesko
Fast vad talar du om nu, är det att kasta exceptions som inte är normalt i python, eller är det att fånga dom? I detta fall kanske det inte är jätte relevant att kasta ett exception, det kan jag hålla med om, eftersom det ändå kommer att kastas ett exception samt att det inte är så svårt att förstå varför det kastas. Men att aldrig kasta exceptions kan ju inte vara hälsosamt?


Nej, menar, enligt python pep, att det är pythonstandard att istället catcha felen än att först kolla ifall det kommer att bli fel. Istället för att kolla ifall filen finns, filnamnet är korrekt, osv osv varje gång du ska öppna en fil, ska du catcha felet. Detta eftersom det är meningen att det som kommer som input är korrekt, och därför ska ta det som grund, istället för att checka femtioelva saker som i 99% av fallen kommer att vara korrekt.

Catcha 1 fel på 99 körningar, istället för att kolla 99 saker för att förhindra 1 fel.
Citera
2017-03-30, 08:31
  #1409
Moderator
vhes avatar
Citat:
Ursprungligen postat av Gottisborgen
Nej, menar, enligt python pep, att det är pythonstandard att istället catcha felen än att först kolla ifall det kommer att bli fel. Istället för att kolla ifall filen finns, filnamnet är korrekt, osv osv varje gång du ska öppna en fil, ska du catcha felet. Detta eftersom det är meningen att det som kommer som input är korrekt, och därför ska ta det som grund, istället för att checka femtioelva saker som i 99% av fallen kommer att vara korrekt.

Catcha 1 fel på 99 körningar, istället för att kolla 99 saker för att förhindra 1 fel.

Det där är lite relaterat till att ofta behöver man fånga felet ändå. I alla fall om man tittar på saker som rör systemets tillstånd, snarare än bara på indatan i sig. I fallet med filer är det ju så att även om du kollat att filen finns, och har rätt typ, och du har läsrättigheter och allt sånt så kan ju det du precis kollat upp upphöra att gälla vid det laget du kommer till att faktiskt öppna den. Filer är ju som bekant inte statiska, och de kan byta namn, försvinna, få andra rättigheter m.m. p.g.a. vad andra gör i systemet. Så i slutändan måste du ändå ha en try/except runt ditt open-anrop.

När det gäller saker som inte borde kunna ändra tillstånd medan din funktion kör (som t.ex. en inkommande lista - eller i alla fall en inkommande tuple) är det rimligare att göra lite kollar. Men om koden formuleras så här...
Kod:
if not lst:
    return None, None
min = max = lst[0]
...

...eller så här...

Kod:
try:
    min = max = lst[0]
except IndexError:
    return None, None
...

...känns inte som om det spelar så stor roll.
Citera
2017-04-02, 20:24
  #1410
Medlem
Om man vill att undantaget "LogError" ska kastas/skapas/genereras. Anta att ett sådant undantag existerar.

Vad menas med "kasta", "skapa" och "generera"?

Någon kanske kan ge ett exempel hur vardera kod hade sett ut med "LogError".

Tack på förhand
Citera
2017-04-02, 20:43
  #1411
Medlem
Skriv en rekursiv funktion, minAndMax, som tar en lista samt argument och returnerar ett par, där det första elementet i paret är det minsta värdet från listan samt det andra elementet är det största värdet.

mitt försök:

Kod:
def minAndMax(lst):
    if len(lst)==0:
        return
    if len(lst)==1:
        return lst[0],lst[0]
    if len(lst)==2 and lst[0]<lst[1]:
        return lst[0],lst[1]
    else:
        return lst[1],lst[0]
    elif len(lst)>2:
        k=lst[0]+minAndMax(lst)
Vid det fetstilade tar det stopp.

Och här är min långa kod som verkar fungera men det känns som att den är onödigt lång:

Kod:
def minandmax(lst):
    if len(lst)==0:
        return 0
    if len(lst)==1:
        return lst[0],lst[0]
    if len(lst)==2 and lst[0]<lst[1]:
        return lst[0],lst[1]
    if len(lst)==2 and lst[0]>lst[1]:
        return lst[1],lst[0]
    if len(lst)==2 and lst[0]==lst[1]:
        return lst[0],lst[1]
    if lst[0]<=lst[1]<=lst[2]:
        del lst[1]
        return minandmax(lst)
    if lst[0]<=lst[2]<=lst[1]:
        del lst[2]
        return minandmax(lst)
    if lst[1]<=lst[0]<=lst[2]:
        del lst[0]
        return minandmax(lst)
    if lst[1]<=lst[2]<=lst[0]:
        del lst[2]
        return minandmax(lst)
    if lst[2]<=lst[0]<=lst[1]:
        del lst[0]
        return minandmax(lst)
    if lst[2]<=lst[1]<=lst[0]:
        del lst[1]
        return minandmax(lst)
Citera
2017-04-02, 21:35
  #1412
Medlem
Kod:
def stringToInt(s):
    if len(s)==0:
        return ""
    if len(s)==1:
        return s[0]
    else:
        j=s[0]+stringToInt(s[1:])
        return j

Hur kan jag få den här funktionen att skriva ut 112, istället för '112' Om s = '112'?
Citera
2017-04-03, 02:58
  #1413
Medlem
En ledtråd är att du har användning av "int(x)" som konverterar x till ett heltal.
Citera
2017-04-04, 18:07
  #1414
Medlem
Citat:
Ursprungligen postat av Hominem
En ledtråd är att du har användning av "int(x)" som konverterar x till ett heltal.

Jag försökte med return int(x) men då blev det additon, vilket blir fel. Men jag kanske använder den på fel sätt
Citera
2017-04-04, 20:45
  #1415
Moderator
vhes avatar
Citat:
Ursprungligen postat av Boven541
Om man vill att undantaget "LogError" ska kastas/skapas/genereras. Anta att ett sådant undantag existerar.

Vad menas med "kasta", "skapa" och "generera"?

Någon kanske kan ge ett exempel hur vardera kod hade sett ut med "LogError".

Tack på förhand

Med kasta/skapa/generera menas att man använder nyckelordet raise:

Kod:
raise LogError()

Det gör att koden som körs omedelbart avbryts, och man hamnar på det ställe i anropskedjan som fångar undantaget (eller en mer generellt undantag som LogError ärver). Om ingen del i anropskedjan fångar undantaget kommer programmet/tråden att avslutas.
Citera
2017-04-04, 22:07
  #1416
Medlem
Citat:
Ursprungligen postat av vhe
Med kasta/skapa/generera menas att man använder nyckelordet raise:

Kod:
raise LogError()

Det gör att koden som körs omedelbart avbryts, och man hamnar på det ställe i anropskedjan som fångar undantaget (eller en mer generellt undantag som LogError ärver). Om ingen del i anropskedjan fångar undantaget kommer programmet/tråden att avslutas.

Vad menas med fångar undantaget?
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