Reputation: 21
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
Upvotes: 1
Views: 25697
Reputation: 2434
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
Upvotes: 5
Reputation: 33335
nepaliMonths
is a list, and indeed, lists do not have a .get()
method.
Perhaps you meant nepaliMonths[nepYear - startingNepYear][nepMonth]
?
Upvotes: 1