Python generate Birth date ( Quiz )

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 ? 🙂

原文链接:Python generate Birth date ( Quiz )

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
Stop to have a rest, do not forget others still in the running.
停下来休息的时候,不要忘记别人还在奔跑
评论 抢沙发

请登录后发表评论

    暂无评论内容