1

I am trying to convert English Date to equivalent Nepali date.

When I run the code I get

AttributeError: 'list' object has no attribute 'get'

This is my code:

from datetime import date
import datetime 
import time
import calendar

engMonth = int(input('Enter birth month in A.D.'))
engDate = int(input('Enter birth date in A.D.'))
engYear = int(input('Enter birth year in A.D.'))

Below is a List of no. of days in each month of each year within a valid range

Nepali year-month List where, 2000, 2001, 2002 and so on are the Nepali years and 30, 32, 31 and so on are the total days in months

nepaliMonths = [
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],  #2000
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],  #2001
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 30, 32, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 32, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 30, 32, 31, 32, 31, 31, 29, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],
            [ 31, 31, 31, 32, 31, 31, 29, 30, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],  #2071
            [ 31, 32, 31, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],  #2072
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 31 ],  #2073
            [ 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
            [ 31, 31, 31, 32, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 29, 30, 30 ],
            [ 31, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 32, 31, 32, 30, 31, 30, 30, 29, 30, 30, 30 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30 ],
            [ 30, 31, 32, 32, 30, 31, 30, 30, 29, 30, 30, 30 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],  #2090
            [ 31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30 ],
            [ 30, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 30, 30, 30 ],
            [ 30, 31, 32, 32, 31, 30, 30, 29, 30, 29, 30, 30 ],
            [ 31, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30 ],
            [ 31, 31, 32, 31, 31, 31, 29, 30, 29, 30, 29, 31 ],
            [ 31, 31, 32, 31, 31, 31, 30, 29, 29, 30, 30, 30 ]   #2099
        ]


#define the least possible English date 1944/01/01 Saturday.

startingEngYear = 1944
startingEngMonth = 1
startingEngDay = 1
dayOfWeek = calendar.SATURDAY  #1944 is a saturday


#Let's define the equivalent Nepali date 2000/09/17.

startingNepYear = 2000
startingNepMonth = 9
startingNepday = 17


# Let's calculate the number of days between the two English dates as follows:

date0=date(engYear,engMonth,engDate)
date1=date(startingEngYear,startingEngMonth,startingEngDay)
delta=date0 - date1
# print (delta.days)


#initialize required nepali date variables with starting  nepali date
nepYear = startingNepYear
nepMonth = startingNepMonth
nepDay = startingNepday

Error is in this block of code.

# decrement delta.days until its value becomes zero
while delta.days != 0:

    # getting total number of days in month nepMonth in a year nepYear
    daysInMonth = nepaliMonths.get(nepYear)[nepMonth]
    nepDay+=1 # incrementing nepali day

    if(nepDay > daysInMonth):
        nepMonth+=1
        nepDay = 1

    if(nepMonth > 12):
        nepYear+=1
        nepMonth = 1

    dayOfWeek+=1 #counting the days in terms of 7 days
    if(dayOfWeek > 7):
        dayOfWeek = 1

    delta.days-=1   

Help

2
  • 1
    The error is pretty descriptive. You don't access list with get() Commented Mar 29, 2018 at 4:25
  • You are using nepyear as an idex which is 2000 ... Even if you remove .get you still will run into idex out of range . issue is with your list of nepyear Commented Mar 29, 2018 at 4:29

2 Answers 2

5

Why not use a Python dictionary?

With a dictionary you could have something like this:

nepaliMonths = { 2000: [ 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 29, 31 ],
                 2001: [ 31, 31, 32, 31, 31, 31, 30, 29, 30, 29, 30, 30 ],

                 # Fill with rest of data . . .

                 2099: [ 31, 31, 32, 31, 31, 31, 30, 29, 29, 30, 30, 30 ] }

Then, to index your data set, simply use nepaliMonths[year][month - 1]

Example: nepaliMonths[2000][0] == 30 and nepaliMonths[2000][11] == 31

Another method:

With your current implementation, you simply use nepaliMonths[year - 2000][month - 1]

Example: nepaliMonths[0][0] == 30 and nepaliMonths[0][11] == 31

Sign up to request clarification or add additional context in comments.

Comments

1

nepaliMonths is a list, and indeed, lists do not have a .get() method.

Perhaps you meant nepaliMonths[nepYear - startingNepYear][nepMonth]?

1 Comment

@ JohnGordon I tried your way and got "IndexError: list index out of range" as error

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.