Beginner Python exercise: Your help

Beginner Python exercise: Your help

Mwelewa

JF-Expert Member
Joined
Jan 5, 2011
Posts
2,343
Reaction score
3,286
Greetings brethren!

Few days ago I started a post asking for your help for a beginner python exercise. Give thanks for the contributions.....nilisaidika sana mosi the task was solved pili nilipewa ushauri nikazanie kuelewa basics kwenye python kama vile Array, function, declaration, numpy...etc

Pamoja na hilo angalizo I was asked to post challenges for programers in all levels to solve so here I am.

The exercise is attached on the photo

c1e31b1e99dfa29d4f96f874bf10004a.jpg


Mkuu Graph , Kurt godel , ISO M.CodD , ub16 , mij , Jabman and all the programmers
 
Hili swali rahisi sana kwangu, siwezi kulichukulia kama challenge, ngoja wafanye wengine.
 
Bro nimeona swali lako.Ahsante kwa kuitika wito wa kutoa challenges.Nimelisolve fasta fasta Ila function inafanya kazi.Ngoja nikae ni modify mdogo Nije na lililo Kuwa simplified
 

Attachments

  • sum.txt
    sum.txt
    547 bytes · Views: 62
  • screenshot.png
    screenshot.png
    144.6 KB · Views: 54
Hilo jibu la jamaa kajitahidi ila ni inefficient.

Inabidi ujue kitu, unavyokua unaandika software jitahidi kufikiria resources, yaani memory na cpu. Mfano, kwenye swali hapo umepewa array yenye objects laki moja, unatengeneza array nyingine unafanya copying almost all of the elements bila sababu, unaweza hisi labda zinaweza kua chache, lakini jiulize, mfano kama array yote uliyopewa ina two digit integers je? manake unakua umetoa copy ya 100,000 elements mara kibao, laki moja yaweza kua ndogo ila ukifanya hii kwenye computer mara kadhaa inafika muda unajikuta umetumia RAM kubwa mno bila sababu. Alafu unamaliza unaanza kucompare hizo array mpya ulizoweka, unajikuta umefanya pass kibao. Hilo swali likibadilishwa kidogo tu ukapewa a million objects utajikuta your code inarun twice or more times slower.

Sasa swali kama hilo hapo juu njia nzuri ni ipi?

Code:
1. def solution(A):
2.    sum = 0
3.    for i in A:            //loops through all elements in array
4.         x = abs(i)    //returns a positive integer
5.         if x>=10 and x<=99:
6.             sum+=i
7.    return sum

Notice code hapo inafanya only one pass, yaani for loop inarun from 0 to N element mara moja tu basi, hakuna kuloop tena na tena na hakuna kustore all the elements sehemu yoyote ile kula memory bure, Hapo kwenye line ya tano, unaweza weka njia yoyote ile ya kucompare. hiyo ya kucheki kama namba ni between 10 and 99 ndiyo the simplest way kucheki kama ni two digit, kumbuka nilitumia abs(i) ambayo inakupa positive integer hata kama ni negative, so that will always work. Njia nyingine ni kugawa hiyo number kwa 10 au hata kutumia bit operations kwa speed ila haina haja kabisa kwenye hili swali.
 
Swali halijataka efficiency lingetaka ningeweka code efficient.Alfu Kuna lugha za kukaa busy unatafta efficiency kama c na assembly language.Kwa python Kuna mechanism zinazo optimise bytecode.The only thing good kuhusu code yako no Kuwa umetumia abs() Ila Cyo efficiency.Am sure ukifanya benchmarking cdhan kama code yako imefanya extra leap kiihvyo maana hyo abs function yenyewe Ina instructions kibao
 
Swali halijataka efficiency lingetaka ningeweka code efficient.Alfu Kuna lugha za kukaa busy unatafta efficiency kama c na assembly language.Kwa python Kuna mechanism zinazo optimise bytecode.The only thing good kuhusu code yako no Kuwa umetumia abs() Ila Cyo efficiency.Am sure ukifanya benchmarking cdhan kama code yako imefanya extra leap kiihvyo maana hyo abs function yenyewe Ina instructions kibao

Si kweli ulichosema kuhusu C. Python, C, Java e.t.c zote zina~optimization technniques, na hizi zinafanywa na compiler. Na compiler sio smart enough kutambua unaweka data kwenye arrays ambayo utaloop baadaye alafu isiziweke, itafanya kama ulivyotaka, optimization ya compiler haipo kama unavyoifikiria.

Kusema the only good thing ni kutumia abs alafu ukasema its not efficient unaji~negate mwenyewe. It is efficient aliyekwambia its not nani? abs haina complicated methods, tena iko optimized vizuri sana, inacheki kama sign flag iko set kwenye bits, if it is inatumia 2s compliment kunegate, its very fast.

Fanya benchmark kwa 100,000 elements uone utofauti ulivyomkubwa. You are copying your data three times, sio hivyo tu, unaconvert zote into strings, alafu unamaliza una~loop through all of them kucompare, then unamaliza una~loop tena kupata sum mara mbili kwa arrays zote mbili. Yote hayo alafu useme benchmark ni sawa? Hehe come on, tusibishe kwenye ukweli. Hatushindani tunawekana sawa tu.
 
Back
Top Bottom