[Python] definition vraag

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • flugelisoke
  • Registratie: Januari 2005
  • Laatst online: 27-09 21:31
Hallo coders!


De volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def IsYearLeap(year):
    if year % 4 != 0:
         return False
    elif year % 100 != 0:
         return True
    elif year % 400 != 0:
         return False
    else:
         return True

def DaysInMonth(year,month):        
    normalmonthslist = [31,28,31,30,31,30,31,31,30,31,30,31]
    leapmonthslist =   [31,29,31,30,31,30,31,31,30,31,30,31]
  
    if IsYearLeap(year) == True:
        return leapmonthslist[:month]
    else:
        return normalmonthslist[:month]

#print(DaysInMonth(2000,5))


def DayOfYear(year,month,day):
    maandlijst = DaysInMonth(year,month)



    if month <1 or month > 12:
        return None
    if day < 1 or day > maandlijst[-1]:
        return None
    del maandlijst[-1]
  
    total = 0
    for i in maandlijst:
        total+=i
    return total + day
      

  
print(DayOfYear(2000,12,31))
print(DayOfYear(2015,1,25))
print(DayOfYear(2015,12,31))



Regel 24
Bij maandlijst = DaysInMonth(year,month)

Zit er een verschil tussen maandlijst en DaysInMonth(year,month) ?

Want als ik bij de vergelijking:

code:
1
2
3
4
if month <1 or month > 12:
        return None
    if day < 1 or day > maandlijst[-1]:
        return None


in plaats van maandlijst, DaysInMonth(year,month) neerzet, komt er een type error:

TypeError: '>' not supported between instances of 'int' and 'list'

Hoe komt het dat maandlijst wel werkt in een vergelijking ( or < > ) en DaysInMonth(year,month) niet?

Beste antwoord (via Woy op 24-07-2019 11:34)


  • Sendy
  • Registratie: September 2001
  • Niet online
Ben je niet gewoon de [-1] vergeten achter DaysInMonth(y, d)?

Alle reacties


Acties:
  • Beste antwoord
  • +3 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Ben je niet gewoon de [-1] vergeten achter DaysInMonth(y, d)?

Acties:
  • +1 Henk 'm!

  • CCJJVV
  • Registratie: Maart 2016
  • Laatst online: 04-10 18:01
Zoals Sendy zegt ben je inderdaad de [-1] achter de function call vergeten.

Je hebt wat dat betreft geluk dat je gebruik maakt van python3. Voer je deze zelfde code uit met behulp van python2 dan was hij er vrolijk voorbij gegaan en had je een mooie bug geïntroduceerd in je programma.

Acties:
  • 0 Henk 'm!

  • flugelisoke
  • Registratie: Januari 2005
  • Laatst online: 27-09 21:31
@Sendy @CCJJVV

Als ik lijstmetmaanden[-1] doe werkt de code wel, wanneer ik:

- DaysInMonth(year,month-1)
- DaysInMonth(year,month)
- DaysInMonth(-1)
- DaysInMonth(month)
- DaysInMonth(month-1)

doe, komen ze allemaal uit op een error.

Acties:
  • +1 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@flugelisoke DaysInMonth(year,month) geeft een lijst als resultaat. Daar moet je dus nog een element uit pakken net zoals je met lijst lijstmetmaanden doet door de indexing operator [] te gebruiken.

Python:
1
someDay = DaysInMonth(year,month)[-1]

is dus vergelijkbaar met
code:
1
2
lijstmetmaanden = DaysInMonth(year,month)
someDay = lijstmetmaanden[-1]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • flugelisoke
  • Registratie: Januari 2005
  • Laatst online: 27-09 21:31
Bedankt, elke keer leer ik weer een stapje meer :)
Pagina: 1