puzzle - Simplifying Python program -
puzzle - Simplifying Python program -
i'm finish beginner in python , programming in general. made programme spotify's best before puzzle. accepted. have looked litle around on net , looked @ other solutions problem, , have seen have importet several modules, inclusive calendar module. understand solution, wanted create myself practice.
i appreciate tips , hint, without haveing import code. it's printer(a)
, det datamaker()
needs modification.
normyear = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] leapyear = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] answerlist = [] u''' check if of integers years ''' def yearcheck(): x in xrange(0, 3): = datalist[x] if len(a) > 2: if not len(a) == 4 , int(a) in xrange(2000,3000): if int(a) in xrange(100,1000): datalist[x] = int(a) + 2000 else: print info + u" illegal" u''' create integers , sort ''' def integer(): x in xrange(0, 3): datalist[x] = int(datalist[x]) datalist.sort() u''' check possible jump years ''' def leapyears(): global leaplist leaplist = [] x in xrange(0, 3): if datalist[x] % 4 == 0: if datalist[x] % 100 == 0: if datalist[x] % 400 == 0: leaplist.append(x) else: leaplist.append(x) u''' changes year type ''' def defyear(a): global xyear if in leaplist: xyear = leapyear else: xyear = normyear u''' printer ''' def printer(a): if datalist[a] < 2000: datalist[a] += 2000 year = datalist[a] del datalist[a] if not datalist[0] == 0: month = datalist.pop(0) day = datalist.pop(0) answerlist.append(unicode(year)) answerlist.append(unicode(u'%02d' % month)) answerlist.append(unicode(u'%02d' % day)) print u'-'.join(answerlist) else: print info + u" illegal" u''' looks legal dates, first [y<m<d] [m<y<d] [m,d,y] ''' def datemaker(): x in xrange(0,4): defyear(x) if x == 0: if datalist[1] <= 12 , datalist[2] <= xyear[datalist[1]-1]: printer(x) break elif x == 1: if datalist[0] <= 12 , datalist[2] <= xyear[datalist[0]-1]: printer(x) break elif x == 2: if datalist[0] <= 12 , datalist[1] <= xyear[datalist[0]-1]: printer(x) break else: print info + u" illegal" u''' programme ''' info = raw_input() datalist = data.split(u"/") yearcheck() integer() leapyears() datemaker()
i'd consider trying re-implement using class. exercise practice.
you should consider:
taking advantage of iterable nature of strings, lists, etc. appear thinking loops way 1 might expect see in c. trying away nesting if statements. it's hard follow logic. (see: http://eflorenzano.com/blog/2012/01/01/reducing-code-nesting/)i'd consider implementing first 2 functions follows (there's farther ways improve it):
data = '8/5/32' data_list = data.split('/') def yearcheck(data_list): # years may truncated 2 digits , may in case # omit leading 0 (if there one), 2000 # given "2000", "00" or "0" (but not empty string). # farther examples: # if 2099, given 99 # if 2005, given 05 or 5 # 199 not happen i.e. doesn't years may # truncated 3 digits index, item in enumerate(data_list): if len(item) > 4: # e.g. 30000 print item, '- info invalid' homecoming if len(item) == 4 , int(item) not in xrange(2000, 3000): # e.g. 3015 print item, '- info invalid' homecoming if len(item) == 3: # e.g. 199 print item, '- info invalid' homecoming if len(item) < 3 , int(item) in xrange(32, 100): data_list[index] = int(item) + 2000 homecoming data_list def integer(data_list): int_data_list = [int(item) item in data_list] homecoming int_data_list.sort() yearcheck(data_list) integer(data_list) print data_list
python puzzle spotify simplify
Comments
Post a Comment