Nimeamua kujifunza Python programming

Python Newbie

Member
Jul 17, 2017
77
49
Za jioni wakuu,
Napenda kujifunza vitu vipya na kuanzia jumatatu ya wiki hii nimeanza kujifunza programming language ya python. IT sio fani yangu niliyosomea ila nataka nianze kutengeneza applications kama hobby na kujifunza kitu kipya.

Background ya IT : nilishawahi kujifunza HTML kama miaka 4 iliyopita kwa kutumia online tutorials nadhani nimeshasahu mengi.

Resources : Nimeamua kutumia Codecademy kama chanzo changu cha taarifa kwa sababu ni free na kozi zao ziko simple na well structured na kila hatua kuna mazoezi ya kufanya yanayosaidia kuelewa zaidi.

Nilipofikia: mpaka sasa nimemaliza asilimia 28 ya kozi nzima(nimetumia siku tatu - angalau saa moja kila siku) nimejifunza Syntax, Strings and Console, Conditionals and Control Flow sasa najiandaa kuanza Functions.

Malengo: Nategemea kumaliza kozi yangu ndani ya wiki mbili au tatu na kutengeneza application itakayosaidia kuorganize taarifa za wagonjwa wanapofika hospitali nia iwe kupunguza muda anaotumia mgonjwa hospitalini au application yoyote itakayofanana na hiyo.

Changamoto : Kutokana na niiyojifunza, nimetengeneza application inayoitwa JF Saccos ambayo mteja anaandika jina na umri. Nimeweka condition kuwa kwenye kuandika jina liandikwe bila kuweka namba yoyote na ikiwekwa namba basi apewe taarifa kuwa 'amekosea na aanze upya' jambo ambalo nimefanikiwa ila kwenye umri nimejaribu kuweka condition iwe zaidi ya miaka 18 na akikidhi vigezo akaribishwe na sentesi "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" na akiwa chini ya miaka 18 apewe taarifa kuwa "Hairuhusiwi Wenye Umri Chini Ya Miaka 18". Ila tatizo hata nikiweka chini ya miaka 18 bado inakubali. Sijaelewa nini shida kwenye code. Walimu mnaweza kunisaidia. Mnaweza kuicheki hapa na nimeweka screenshot chini.

sceenshot 1.png
screenshot 2.png



========
UPDATE 1

Nimesoma topic ya function ila bado kuna subtopic bado sijaimaliza...nilitaka nije na code inayojumuisha function ila nitasubiri nimalize kwanza function.

Nimefanya zoezi lingine kwa kuandika codes ya Project inayoitwa "JF Health Centre" inayomtaka user kuandika jina na umri na kumkaribisha kwenye huduma kwa kumtaja jina na umri na pia kumtaka kuchagua aina ya daktari aidha daktari bingwa au daktari wa kawaida(GP) na kumpatia gharama ya consultation kulingana na uchaguzi wa aina ya daktari.
View attachment 548112



Pia nimegundua kutokuwa na elimu ya loops inanifanya nisiweze kuiamuru code isimame pale user anapokosea aina ya entry. So nitasubiri nimalize loops nijue nitasolve vipi tatizo hilo though mdau @Arduino Sentinel alinidokezea.

Stefano Mtangoo

======
UPDATE 2

Habari za jioni wakuu ?
Leo nimekuja na nyongeza ya kile nilichojifunza na kukifanyia kazi. Kwa kifupi nimefanikiwa kusoma functions na nimejaribu kuiweka kwenye hii project yangu ya kujifunzia.

Program yangu kwa sasa inakubali majina mawili ya mgonjwa pamoja na umri,urefu na uzito na kisha inapiga hesabu ya BMI na kutoa taarifa kama mgonjwa ana uzito sawa au overweight.

Pia inampa uchaguzi wa aina ya daktari anayetaka kumuona('specialist' au 'gp') pamoja na aina ya check up anayotaka kufanyiwa('general' au 'full') na inapiga hesabu ya jumla ya gharama na kumtaarifu mgonjwa. Nimeweka gharama ya specialist ni elfu 30 na gp elfu 10 pia gharama ya general check up ni elfu 50 na full check up ni laki na nusu. So mwisho gharama ni kutokana na uchaguzi wa hivyo viwili.

Code ni hizo hapo chini:
Code:
from datetime import datetime
date=datetime.now().strftime("%d-%m-%y %H:%M:%S")
print "KARIBU JF HEALTH CENTRE PATIENT'S DATABASE> Leo ni tarehe %s" %(date)

name=raw_input("Jina la kwanza la Mgonjwa:")
sir_name=raw_input("Jina la ukoo la Mgonjwa")

print "Umri:"
age=input()
age=float(age)

print "Uzito(kg):"
weight=input()
weight=float(weight)

print "Urefu(metre):"
height=input()
height=float(height)

bmi= weight/(height**2)
if bmi<30:
  print "Ndugu %s %s, mwenye umri wa miaka %s,ana uzito sahihi kulingana na urefu" %(name,sir_name,age)
if bmi>30:
  print "Ndugu %s %s, mwenye umri wa miaka %s,ana tatizo la ongezeko la uzito wa mwili(OVERWEIGHT)" %(name,sir_name,age)
 
def doctor(grade):
  if grade=="specialist":
    return 30000
  if grade=="gp":
    return 10000
def examination(exam):
  if exam=="general":
    return 50000
  if exam=="full":
    return 150000
def cost(grade,exam):
  return doctor(grade)+ examination(exam)

grade=raw_input("Mgonjwa anataka kuonwa na 'specialist' au 'gp' ?")
exam=raw_input("Mgonjwa anataka kufanya 'general' au 'full' check up ?")

print "Jumla ya gharama ya matibabu ni shillingi za kitanzania %s" %cost(grade,exam)
Unaweza kuijaribu hapa

Pia nimejifunza lists na library na ninaziandikia code ambapo kutakuwa na libray ya madaktari, vipimo, madawa nk

Karibuni kwa michango yenu

========
UPDATE 3

Za jioni wanajamii,
naomba msaada kwa yoyote atakayeweza kunisaidia...

Nimeandika calculator ya menu ya chakula pamoja na bei...yani inabpiga hesabu kutokana na vyakula unavyochagua then inakupa gharama ya jumla halafu kama gharama ni zaidi ya elfu 10 inamtaarifu mtoa huduma kuwa mteja apewe punguzo la bei ila kama ni chini ya 10 inamtaarifu kuwa mteja hatakiwi kupewa punguzo la bei.

Sasa shida ni hapo mwisho ambapo hata kama jumla ya gharama ni chini ya elfu 10 bado program inatoa taarifa kuwa mteja apewe punguzo la bei.

code ni hizo hapo naomba msaada

Code:
def breakfast(asubuhi):
  if asubuhi=="chai":
    return 1000
  if asubuhi=="maziwa":
    return 2000
def lunch(mchana):
  if mchana=="wali":
    return 2500
  if mchana=="pilau":
    return 3000
def dinner(usiku):
  if usiku=="viazi":
    return 4000
  if usiku=="ndizi":
    return 7000
def gharama(asubuhi,mchana,usiku):
  return breakfast(asubuhi)+lunch(mchana)+dinner(usiku)

asubuhi=raw_input("Kifungua kinywa (chai au maziwa ?)")
mchana=raw_input("Chakula cha mchana(wali au pilau?)")
usiku=raw_input("Chakula cha usiku(viazi au ndizi)")

print "gharama ni tz sh. %s" %gharama(asubuhi,mchana,usiku)

if gharama<10000:
  print "hakuna punguzo la bei"
if gharama>10000:
  print "toa punguzo la bei"

Stefano Mtangoo Arduino Sentinel Andy Kawa Graph



 
Mtoa mada, mie sina utaalam wa mambo ya telnolojia (IT) ila naona hapa watu wamelidaka wazo lako la kutengeneza hiyo programu unayotaka kuiandaa kwa ajili ya hospitali na hapa wanalifanyia kazi chini chini ili wauze kwenye hospitali.
Ila naweza kuwa nimewaza vibaya pengine hakuna aliyewaza kukuibia wazo lako na kwenda kulifanyia kazi badala ya kukusaidia.

Kila ka kheri.
 
Mtoa mada, mie sina utaalam wa mambo ya telnolojia (IT) ila naona hapa watu wamelidaka wazo lako la kutengeneza hiyo programu unayotaka kuiandaa kwa ajili ya hospitali na hapa wanalifanyia kazi chini chini ili wauze kwenye hospitali.
Ila naweza kuwa nimewaza vibaya pengine hakuna aliyewaza kukuibia wazo lako na kwenda kulifanyia kazi badala ya kukusaidia.

Kila ka kheri.
Hehehe sikuwahi fikiria hivyo ila naamini matatizo kwenye jamii yapo mengi na hivyo ideas bado ziko nyingi sana ! Hata likishindikana hili tutakuja na wazo lingine zuri zaidi
 
Vipi mdau ? Karibu kwa maoni

Kama umejifunza Control flow specifically Loops, basi hii program yako ilibidi ui modify iwe bora zaidi!
Mfano una check condition kama jina ni alphabetical,iwapo ata type Namba e.g 9999 kama mm nilivoanya kwenye picha, program inabidi imuombe mteja kuruduia...Kwa kutumia Loops hii process ilibidi iwe ya kujirudia mpaka mteja apatie format ya Jina unalotaka ila kinyume chake inanambia nirudie upya, hapo hapo bado inaniomba niweke Umri, naweka Umri na mwisho kabisa ina Print jina(lisilokua sahihi) na Umri wangu...sasa hapa kituko ni kuwa ina Print jina langu kama 9999 wakati program haitaki mteja awe na jina ambalo ni namba!

Ambacho ungefanya hiyo process ya ku prompt user Jina ilibidi iwe katika Loop e.g while loop kiasi kwamba mteja atarudie hii process ya ku type jina mpaka alipatie!

Kitu kingine kuhusu hiyo age ya under 18 nafikiri umesahau kuwa Python variables za Python hazioneshi data type ingekua kwenye programming language ambako una specify data type e.g string na int basi usingeanguka katika huu mtego na hizo ndo hasara za lugha moja na nyingine na hii inaweza kuwa shida katika project kubwa zaidi.

Kwa navyojua ile Keyboard input unayochukua kwa function ya raw_input() lazima itakua String na age ni Interger data type hivo mwisho wa siku unachokifanya una compare data types mbili tofauti ndo maana condition yako haiwi Met au progrm yako kufanya unachokusudia.

Inabidi ui convert ae ambayo ni string kuwa int kwa kutumia Function ya int() katika Python

Tazama picha kwa vielelezo zaidi

Screenshot_7.png
 
Changamoto : Kutokana na niiyojifunza, nimetengeneza application inayoitwa JF Saccos ambayo mteja anaandika jina na umri. Nimeweka condition kuwa kwenye kuandika jina liandikwe bila kuweka namba yoyote na ikiwekwa namba basi apewe taarifa kuwa 'amekosea na aanze upya' jambo ambalo nimefanikiwa ila kwenye umri nimejaribu kuweka condition iwe zaidi ya miaka 18 na akikidhi vigezo akaribishwe na sentesi "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" na akiwa chini ya miaka 18 apewe taarifa kuwa "Hairuhusiwi Wenye Umri Chini Ya Miaka 18". Ila tatizo hata nikiweka chini ya miaka 18 bado inakubali. Sijaelewa nini shida kwenye code. Walimu mnaweza kunisaidia. Mnaweza kuicheki hapa na nimeweka screenshot chini.

Kwanza hongera kwa kuamua kujifunza programming, hakikisha hukati tamaa na kuishia njiani.

Kwenye codes zako kuna mapungufu ambayo ndio yanasababisha zisifanye kazi inavotakiwa, kitaalamu, code zako zina 'Semantic and Design Errors ' (kumbuka hizi ndo the worst errors sababu syntax ya programu ipo poa na codes zitakua interpreted na python kama kawaida ila final results zitakua zizo ulizokusudia ziwe)

Tuangalie code snippet yako mstari baada ya mstari ilikujua umekosea wapi.
(NB: Nitasahihisha kutokana na dhumuni la programu ulilolisema hapo juu, Na nita assume bado hujajifunza Loops}

Code:
print "KARIBU JF SACCOS"
from datetime import datetime
date = datetime.now()
print "Leo ni tarehe %s" %date
### So far mpaka hapa hakuna tatizo, unless unataka specific format ya date iwe presented
kwa user (kwenye code zangu nimetumia format ya "%Y-%m-%d %H:%M:%S" kama format, offical docs zimeieleza vizuri hii module,
kwa maelezo zaidi pitia 8.1. datetime — Basic date and time types — Python 2.7.13 documentation ###

Code:
raw_input("Bonyeza Enter halafu Andika jina lako:")
### kwa lugha ya python, uandishi huu unaweza ona wakawaida na usione affect yoyote sababu codes zenyewe ni chache, ulichokifanya ni kumuomba user a-pass on prompt arguments kwa raw_input() function ambao unajua fika utaitajia kuja assign standard output yake kwenye variable 'name', kwani huja assign on first place? huoni kua ni bad variable assignment handling? pia chini ya panzia ni matumiza mabaya ya memory. kwa kifupi ni uandishi mbovu! Embu jipige brush zaidi kwenye ili swali kabla huja dive deep!itakusumbua sana baadae###

Code:
name=raw_input()
### si vyema kuinitialize varibale kwa namna hii kama nilivosema awali, this "name = raw_input("Bonyeza Enter halafu Andika umri wako:")" is what is acceptable and uandishi mzuri pia) ###


Code:
if name.isalpha():
  print name
else:
  print 'Umekosea anza upya'

raw_input("Bonyeza Enter halafu Andika umri wako:")
age=raw_input()
if age > 18:
  print age
else:
  print "Hairuhusiwi Wenye Umri Chini Ya Miaka 18"

print "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" %(name,age)
### Hiyo conditional statement hapa juu ni garbage semantically pia ni poor designed!!(So far sio mbaya {ni mbaya actually:)} but ndo vizur sababu uwezi jifunza bila kufanya this novice mistakes infact kila mtu alifanya mistakes wakati anaanza jifunza.so keep doing more and more but hakikisha unajifunza kuyakosoa hizo mistakes.

Tuanza na main If statement ya kwanza, unachotaka ku archive ni kutest kama variable name ni alphabetical only, if true then do something useful,(printing a name sio something useful in design way ya programu hii, so one of the useful thing amabyo ingeweza fanyika ni kumprompt use andike more details zakufanikisha programu yetu but this time tutamuita jina kabisa coz tayari tunalijua(again point is, wakati design programu, akikisha unaepuka useless implementations as possible, age=int(raw_input("Ndugu %s Andika umri wako: " %name)) ni usefull than just uselessly printing name. NB: int() convention imetumika sababu function raw_input inarudisha string value, so kwa mfano user akiingiza let say 09, programu itarudisha error since Boolean operation "str >= int" haitarudisha true, infact you cant test string against interger). cheki mfano kwenye code zangu chini.

Secondly kwenye hiyo hiyo main If Statement umemaliza na else: condition yenye lengo la kuterminate programu but again, it useless since the following if statement itakua executed no matter what. So unaona kabisa this is another poor design na pia semantic error since programu haitafanya kile wewe umekusudia. Simplest approach ungeweza fanya ni kua na nested conditional statement amabayo yenywe ndo ingetest kama umri alioingiza user ni less 18 basi imwambie nini chakufanya else programu impe hongera ya kufungua a/c. pitia codes zangu chini kuona jinsi ambavyo ingefanyika.

Lastly, Turudi kwenye tatizo lako kuu, kwanini programu inarudisha majibu chanya hata kwa umri less than 18, Kwanza kabisa, statement print "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" %(name,age) ipo nje ya conditional statement so, hata hufanayje, programu itarun na kurudisha ujumbe wa hongera no matter the conditional statement.(As i said, this is another biggest semantic error ambayo novice ni kawaida kufanya, hakikisha kama kuna conditional statement au loops kwa programu yako, the final testing results ziwa ndani ya scope ya hizo statements zako, nakushauri upige msuri fresh kwenye hizo mambo sababu naona bado hujamaster fresh, fanya practise nyingi zaidi ili uwelewe na uzoee, usisome tu concept na kuishia hapo.)

Bonus: kuna mistake nyingine umefanya kwenye Boolean operation, 'age > 18' itarudisha true kwa values zote greater than 18 na sio 18, kwaio user akiingiza umri 18, programu itamkata, kuminclude 18, it should be 'age >= 18'.(pia fanya practise zaidi na hizi boolean operations)

Nikusistizie tu, piga prac lakutosha, utatoboa tu. All the best.
###


Programu niliofix errors.
Code:
from datetime import datetime

print "KARIBU JF SACCOS"
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print "Leo ni tarehe %s" %date

name = raw_input("Andika jina lako: ")
if name.isalpha():
  age = int(raw_input("Ndugu %s Andika umri wako: " %name))
  if age >= 18:
    print "Hongera ndugu %s, mwenye miaka %d,umefanikiwa kufungua akaunti" %(name,age)
  else:
    print "Hairuhusiwi Wenye Umri Chini Ya Miaka 18"
else:
  print 'Hakikisha jina lako ni muunganiko wa herufi tu!Tafadhali anza upya.'
 
Kwanza hongera kwa kuamua kujifunza programming, hakikisha hukati tamaa na kuishia njiani.

Kwenye codes zako kuna mapungufu ambayo ndio yanasababisha zisifanye kazi inavotakiwa, kitaalamu, code zako zina 'Semantic and Design Errors ' (kumbuka hizi ndo the worst errors sababu syntax ya programu ipo poa na codes zitakua interpreted na python kama kawaida ila final results zitakua zizo ulizokusudia ziwe)

Tuangalie code snippet yako mstari baada ya mstari ilikujua umekosea wapi.
(NB: Nitasahihisha kutokana na dhumuni la programu ulilolisema hapo juu, Na nita assume bado hujajifunza Loops}

Code:
print "KARIBU JF SACCOS"
from datetime import datetime
date = datetime.now()
print "Leo ni tarehe %s" %date
### So far mpaka hapa hakuna tatizo, unless unataka specific format ya date iwe presented
kwa user (kwenye code zangu nimetumia format ya "%Y-%m-%d %H:%M:%S", offical docs zimeieleza vizuri module,
kwa maelezo zaidi pitia 8.1. datetime — Basic date and time types — Python 3.6.2 documentation ###

Code:
raw_input("Bonyeza Enter halafu Andika jina lako:")
### kwa lugha ya python, uandishi huu unaweza ona wakawaida na usione affect yoyote sababu codes zenyewe ni chache, ulichokifanya ni kumuomba user a-pass on prompt arguments kwa raw_input() function ambao unajua fika utaitajia kuja assign standard output yake kwenye variable 'name', kwani huja assign on first place? huoni kua ni bad variable assignment handling? pia chini ya panzia ni matumiza mabaya ya memory. kwa kifupi ni uandishi mbovu! Embu jipige brush zaidi kwenye ili swali kabla huja dive deep!itakusumbua sana baadae###

Code:
name=raw_input()
### si vyema kuinitialize varibale kwa namna hii kama nilivosema awali, this "name = raw_input("Bonyeza Enter halafu Andika umri wako:")" is what is acceptable and uandishi mzuri pia) ###


Code:
if name.isalpha():
  print name
else:
  print 'Umekosea anza upya'

raw_input("Bonyeza Enter halafu Andika umri wako:")
age=raw_input()
if age > 18:
  print age
else:
  print "Hairuhusiwi Wenye Umri Chini Ya Miaka 18"

print "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" %(name,age)
### Hiyo conditional statement hapa juu ni garbage semantically pia ni poor designed!!(So far sio mbaya {ni mbaya actually:)} but ndo vizur sababu uwezi jifunza bila kufanya this novice mistakes infact kila mtu alifanya mistakes wakati anaanza jifunza.so keep doing more and more but hakikisha unajifunza kuyakosoa hizo mistakes.

Tuanza na main If statement ya kwanza, unachotaka ku archive ni kutest kama variable name ni alphabetical only, if true then do something useful,(printing a name sio something useful in design way ya programu hii, so one of the useful thing amabyo ingeweza fanyika ni kumprompt use andike more details zakufanikisha programu yetu but this time tutamuita jina kabisa coz tayari tunalijua(again point is, wakati design programu, akikisha unaepuka useless implementations as possible, age=int(raw_input("Ndugu %s Andika umri wako: " %name)) ni usefull than just uselessly printing name.). cheki mfano kwenye code zangu chini.

Secondly kwenye hiyo hiyo main If Statement umemaliza na else: condition yenye lengo la kuterminate programu but again, it useless since the following if statement itakua executed no matter what. So unaona kabisa this is another poor design na pia semantic error since programu haitafanya kile wewe umekusudia. Simplest approach ungeweza fanya ni kua na nested conditional statement amabayo yenywe ndo ingetest kama umri alioingiza user ni less 18 basi imwambie nini chakufanya else programu impe hongera ya kufungua a/c. pitia codes zangu chini kuona jinsi ambavyo ingefanyika.

Lastly, Turudi kwenye tatizo lako kuu, kwanini programu inarudisha majibu chanya hata kwa umri less than 18, Kwanza kabisa, statement print "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" %(name,age) ipo nje ya conditional statement so, hata hufanayje, programu itarun na kurudisha ujumbe wa hongera no matter the conditional statement.(As i said, this is another biggest semantic error ambayo novice ni kawaida kufanya, hakikisha kama kuna conditional statement au loops kwa programu yako, the final testing results ziwa ndani ya scope ya hizo statements zako, nakushauri upige msuri fresh kwenye hizo mambo sababu naona bado hujamaster fresh, fanya practise nyingi zaidi ili uwelewe na uzoee, usisometu concept na kuishia hapo.)

Bonus: kuna mistake nyingine umefanya kwenye Boolean operation, 'age > 18' itarudisha true kwa values zote greater than 18 na sio 18, kwaio user akiingiza umri 18, programu itamkata, kuminclude 18, it should be 'age >= 18'.(pia fanya practise zaidi na hizi boolean operations)

Nikusistizie tu, piga prac lakutosha, utatoboa tu. All the best.
###


Programu niliofix errors.
Code:
print "KARIBU JF SACCOS"
from datetime import datetime
date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print "Leo ni tarehe %s" %date

name=raw_input("Andika jina lako: ")
if name.isalpha():
  age=int(raw_input("Ndugu %s Andika umri wako: " %name))
  if age >= 18:
    print "Hongera ndugu %s, mwenye miaka %s,umefanikiwa kufungua akaunti" %(name,age)
  else:
    print "Hairuhusiwi Wenye Umri Chini Ya Miaka 18"
else:
  print 'Hakikisha jina lako ni muunganiko wa herufi tu!Tafadhali anza upya.'

Mkuu nashukuru sana...umenieleza kwa lugha nyepesi na kunipa solution kwa vitendo yani nimekupata sana....Kabla sijaenda kwenye Function nitarekebisha kwanza hayo makandokando then nitafanya zoezi lingine nililete hapa jioni ili uone.

Asante sana na nitakuwa nakusumbua mpaka nijue.
 
Back
Top Bottom