Siku Hiyo, Mwanafunzi Alinifundishia "for ... else" ya Python

04 Oct 2017

Leo nilikuwa na kipindi cha Form 1. Siku hizi, wanafunzi wanashindana kukatua changamoto za Python kutumia NyokaTofali, ambayo ni software nimeitengeneza; uweza kusoma zaidi kuhusu NyokaTofali hapa.

Wanafunzi wengine walijaribu kukatua changamoto hii:


Elezo la Changamoto : Guanine in DNA

There are four bases in DNA: G (guanine), C (cytosine), A (adenine), and T (thymine). Here is a strand of DNA without guanine in it:

And here is a strand of DNA with guanine in it:

Complete the Python program so that it returns True if guanine is inside the DNA given to it. If there is no guanine inside the DNA, return False.


Code hii iliwapewa na mimi:

def guanine_iko(dna):
  for base in dna:
    print base

NyokaTofali inakuwa na mitihani ambazo wanafunzi waweza kukimbia peke yao, kama hizi:

print(guanine_iko('ATATCCCC')) # Should return False
print(guanine_iko('AGATTCAC')) # Should return True
print(guanine_iko('GGGGGGGG')) # Should return True
print(guanine_iko('')) # Should return False
print(guanine_iko('ATTTTATTTAATG')) # Should return True

Sasa, nina mwanafunzi wa kike mwenye akili sana. Alikuwa na code hii:

def guanine_iko(dna):
  for base in dna:
    if base == G:
      return True
    else:
      return False

Hii haitafanya kazi kwa sababu anahitaji "G" au 'G'. Nilimueleza hivi: base iweza kubadilisha, lakini maana ya G ni ‘guanine’ tu, haitabadilisha. Kwa hiyo, tuhitaji "G" au 'G'.

Mwanafunzi aliibadilisha, halafu alikuwa na:

def guanine_iko(dna):
  for base in dna:
    if base == 'G':
      return True
    else:
      return False

Aliniuliza: “Kwa nini hii inashindwa?”

Nilimuuliza: “Tunataka kurudisha True au False baada ya kucheki base ya kwanza tu, au baada ya kucheki base zote?”

Alijibu: “Base zote.”

Mimi: “Ndiyo. Kwa hiyo, turudishe False ndani ya for loop, au nje?”

Yeye: “Nje.”

Aliibadilisha tena, halafu alikimbia. Alishinda, akakuwa na furaha. Mimi nilikuwa ninaangalia, nikashangaa. Amefanya hivyo:

def guanine_iko(dna):
  for base in dna:
    if base == 'G':
      return True
  else:
    return False

Aliiweka tofali la else chini ya tofali la for. Niliwaza: hivyo inawezekana? Nilifikiri kwamba nimekosea na NyokaTofali.

Lakini inawezekana. Nilisoma kuhusu mambo haya, kwa mfano hapa. Nilijifunza kwamba ukiandika else baada ya for, na code ya for haitakapofanya break au return, code ya else itakimbia. Hivyo vinatumiwa kwa loops za kutafuta: kama code ikishindwa kutafuta kitu, uweza kuandika else kumaliza.

Na kutatua changamoto hii, kazi ya kutafuta ndiyo lazima. Tunatafuta ‘G’ katika DNA. Kwa hiyo, mwanafunzi aliandika kweli: return True katika for, halafu return False katika else, nje na chini ya for.

Tukumbuke: shule ni mahali kwa walimu kuwafundishia wanafunzi, na wanafunzi kuwafundishia walimu.