Today After end of work as Pizza Boy ( As delivery guy / call GrabBike. So i’m sitting front of my laptop found my follower in twitter talking about “function to Generate birth date” as quiz.
Then i try to solve this simple quiz with my self got it with 2 version one use of yield and second use more with lambda.
Version 1.
I use datetime function to limit current year then use random() with randrange method to get number from range that i limit it in range() function.
<span>import</span> <span>random</span><span>from</span> <span>datetime</span> <span>import</span> <span>datetime</span><span>def</span> <span>genDateOfBirth</span><span>(</span><span>number</span><span>=</span><span>1</span><span>):</span><span>CurrentTime</span> <span>=</span> <span>datetime</span><span>.</span><span>now</span><span>()</span><span>Year</span> <span>=</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1911</span><span>,</span> <span>CurrentTime</span><span>.</span><span>year</span><span>)</span><span>for</span> <span>item</span> <span>in</span> <span>range</span><span>(</span><span>number</span><span>):</span><span>yield</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1911</span><span>,</span><span>CurrentTime</span><span>.</span><span>year</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span> <span>12</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span> <span>31</span><span>)</span><span>dateTimeThatIwant</span> <span>=</span> <span>genDateOfBirth</span><span>(</span><span>12</span><span>)</span><span>for</span> <span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span> <span>in</span> <span>dateTimeThatIwant</span><span>:</span><span>print</span><span>(</span><span>"GenDate in yyyy-mm-dd as </span><span>%</span><span>s-</span><span>%</span><span>s-</span><span>%</span><span>s"</span> <span>%</span> <span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span><span>))</span><span>import</span> <span>random</span> <span>from</span> <span>datetime</span> <span>import</span> <span>datetime</span> <span>def</span> <span>genDateOfBirth</span><span>(</span><span>number</span><span>=</span><span>1</span><span>):</span> <span>CurrentTime</span> <span>=</span> <span>datetime</span><span>.</span><span>now</span><span>()</span> <span>Year</span> <span>=</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1911</span><span>,</span> <span>CurrentTime</span><span>.</span><span>year</span><span>)</span> <span>for</span> <span>item</span> <span>in</span> <span>range</span><span>(</span><span>number</span><span>):</span> <span>yield</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1911</span><span>,</span><span>CurrentTime</span><span>.</span><span>year</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span> <span>12</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span> <span>31</span><span>)</span> <span>dateTimeThatIwant</span> <span>=</span> <span>genDateOfBirth</span><span>(</span><span>12</span><span>)</span> <span>for</span> <span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span> <span>in</span> <span>dateTimeThatIwant</span><span>:</span> <span>print</span><span>(</span><span>"GenDate in yyyy-mm-dd as </span><span>%</span><span>s-</span><span>%</span><span>s-</span><span>%</span><span>s"</span> <span>%</span> <span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span><span>))</span>import random from datetime import datetime def genDateOfBirth(number=1): CurrentTime = datetime.now() Year = random.randrange(1911, CurrentTime.year) for item in range(number): yield random.randrange(1911,CurrentTime.year), random.randrange(1, 12), random.randrange(1, 31) dateTimeThatIwant = genDateOfBirth(12) for year, month, date in dateTimeThatIwant: print("GenDate in yyyy-mm-dd as %s-%s-%s" % (year, month, date))
Version 2.
However, I have some question that
- Can i refactor my code shorten ?.
- Can i specify start year of computer usage that python use ?.
So got it use lambda and list-comprehension compound.
<span>import</span> <span>random</span><span>from</span> <span>datetime</span> <span>import</span> <span>datetime</span><span>from</span> <span>time</span> <span>import</span> <span>gmtime</span><span># gmtime(0) you will get epoch first year = 1970 # read more -> https://en.wikipedia.org/wiki/System_time </span><span>startYear</span> <span>=</span> <span>gmtime</span><span>(</span><span>0</span><span>)</span><span>CurrentYear</span> <span>=</span> <span>datetime</span><span>.</span><span>now</span><span>()</span><span>dateTimeGeneratorList</span> <span>=</span> <span>lambda</span> <span>numberOflist</span> <span>:</span> <span>[(</span><span>yield</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>startYear</span><span>.</span><span>tm_year</span><span>,</span> <span>currentYear</span><span>.</span><span>year</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span><span>12</span><span>),</span><span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span><span>31</span><span>))</span> <span>for</span> <span>item</span> <span>in</span> <span>range</span><span>(</span><span>numberOflist</span><span>)]</span><span># 12 if number of list that we need to printout . </span><span>for</span> <span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span> <span>in</span> <span>dateTimeGeneratorList</span><span>(</span><span>12</span><span>):</span><span>print</span><span>(</span><span>"</span><span>%</span><span>s-</span><span>%</span><span>s-</span><span>%</span><span>s "</span> <span>%</span> <span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span><span>))</span><span>import</span> <span>random</span> <span>from</span> <span>datetime</span> <span>import</span> <span>datetime</span> <span>from</span> <span>time</span> <span>import</span> <span>gmtime</span> <span># gmtime(0) you will get epoch first year = 1970 # read more -> https://en.wikipedia.org/wiki/System_time </span> <span>startYear</span> <span>=</span> <span>gmtime</span><span>(</span><span>0</span><span>)</span> <span>CurrentYear</span> <span>=</span> <span>datetime</span><span>.</span><span>now</span><span>()</span> <span>dateTimeGeneratorList</span> <span>=</span> <span>lambda</span> <span>numberOflist</span> <span>:</span> <span>[(</span><span>yield</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>startYear</span><span>.</span><span>tm_year</span><span>,</span> <span>currentYear</span><span>.</span><span>year</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span><span>12</span><span>),</span> <span>random</span><span>.</span><span>randrange</span><span>(</span><span>1</span><span>,</span><span>31</span><span>))</span> <span>for</span> <span>item</span> <span>in</span> <span>range</span><span>(</span><span>numberOflist</span><span>)]</span> <span># 12 if number of list that we need to printout . </span> <span>for</span> <span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span> <span>in</span> <span>dateTimeGeneratorList</span><span>(</span><span>12</span><span>):</span> <span>print</span><span>(</span><span>"</span><span>%</span><span>s-</span><span>%</span><span>s-</span><span>%</span><span>s "</span> <span>%</span> <span>(</span><span>year</span><span>,</span> <span>month</span><span>,</span> <span>date</span><span>))</span>import random from datetime import datetime from time import gmtime # gmtime(0) you will get epoch first year = 1970 # read more -> https://en.wikipedia.org/wiki/System_time startYear = gmtime(0) CurrentYear = datetime.now() dateTimeGeneratorList = lambda numberOflist : [(yield random.randrange(startYear.tm_year, currentYear.year), random.randrange(1,12), random.randrange(1,31)) for item in range(numberOflist)] # 12 if number of list that we need to printout . for year, month, date in dateTimeGeneratorList(12): print("%s-%s-%s " % (year, month, date))
Done!! But, Can i make it better ? 🙂
© 版权声明
THE END
暂无评论内容