പൈത്തണിന്റെ ലോകത്തേക്ക് വായനക്കാര്‍ക്ക് സുസ്വാഗതം. പൈത്തണ്‍ എന്ന പ്രോഗ്രാമിങ്ങ് ലാങ്ഗ്വേജ് പഠിപ്പിക്കാനുള്ള ശ്രമമാണിവിടെ. ആരംഭം മുതലുള്ള പോസ്റ്റുകളുടെ ലിങ്കുകള്‍ ഇടതു വശത്തു കാണാം. ആര്‍ക്കും പഠിക്കാം. ആര്‍ക്കും സംശയങ്ങള്‍ ചോദിക്കാം. വിലക്കുകളോ മോഡറേഷനുകളോ ഇല്ല.

പൈത്തണ്‍: പാഠം അഞ്ച്

>> Tuesday, August 3, 2010

ജനിച്ച വര്‍ഷം കണ്ടുപിടിക്കുന്നതെങ്ങനെ?


കഴിഞ്ഞ പാഠത്തിന്റെ കമന്റുകളില്‍ "Free" എന്ന വായനക്കാരി (രന്‍?) അവതരിപ്പിച്ച പ്രവര്‍ത്തനം ഒന്നു നോക്കാം. ചോദ്യം ഇതാണ്: " ഒരാളുടെ പേരും വയസും ഇന്‍പുട്ട് ആയി എടുത്ത് അയാള്‍ ജനിച്ച വര്‍ഷം ഔട്പുട്ട് തരുന്ന പ്രോഗ്രാം എഴുതുക." ഈ പ്രവര്‍ത്തനത്തിന് "digitaleye" എന്ന വായനക്കാരന്‍ (രി?) തന്ന ഉത്തരം കുറച്ചുകൂടി വിശദമാക്കി എഴുതിയ ഒരു പ്രോഗ്രാം ഇതാ. പ്രോഗ്രാം ഒരു ഫയലിലേക്ക് സേവ് ചെയ്ത് പല പ്രാവശ്യം പ്രവര്‍ത്തിപ്പിച്ചു നോക്കൂ. ഇതിനുള്ള എളുപ്പവഴി IDLE ഉപയോഗിക്കുക എന്നതാണ്, ഇവിടെ പറഞ്ഞിരിക്കുന്നതുപോലെ.


പ്രോഗ്രാമിന്റെ അഞ്ചാമത്തെ വരിയില്‍ ഉപയോക്താവിന്റെ പേര് raw_input() ഉപയോഗിച്ച് പ്രോഗ്രാമിലെ name എന്ന ചരത്തിലേക്ക് എത്തിക്കുന്നു. ഇവിടെ ഉപയോക്താവിനോട് ചോദിക്കേണ്ട ചോദ്യം ഒരു string ആയി തയ്യാറാക്കിയിരിക്കുന്ന രീതി പ്രത്യേകം ശ്രദ്ധിക്കുക. + എന്ന സംകാരകം (operator) സംഖ്യകളുടെ തുക കാണാന്‍ മാത്രമല്ല, string-കളെ കൂട്ടിച്ചേര്‍ത്ത് ഒറ്റ string ആക്കാനും പൈത്തണില്‍ ഉപയോഗിക്കാം. ഉദാഹരണം:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>> "1" + "1"
'11'
>>> 

മുകളിലെ പ്രോഗ്രാമില്‍ ഉപയോക്താവിനെ പേരുള്‍പ്പടെ സംബോധന ചെയ്യാനായി ഈ വിദ്യ പ്രയോഗിച്ചിരിക്കുന്നു. ഏഴാമത്തെ വരിയില്‍ ഇന്‍പുട്ട് ആയി കിട്ടിയ പേരും ചോദിക്കേണ്ട ചോദ്യവും + എന്ന സംകാരകം ഉപയോഗിച്ച് ഒറ്റ string ആക്കി question എന്ന ചരത്തില്‍ സൂക്ഷിക്കുന്നു. ഒന്‍പതാമത്തെ വരിയില്‍ ഉപയോക്താവിനോട് വയസ് ചോദിച്ച് age എന്ന ചരത്തില്‍ സൂക്ഷിക്കുന്നു. ഇതിനു വേണ്ടി മുമ്പത്തെ പാഠത്തില്‍ കണ്ടതുപോലെ input() ഉപയോഗിക്കുന്നു. input() -ന്റെ ബ്രായ്ക്കറ്റിനുള്ളില്‍ ഉപയോക്താവിനോട് ചോദിക്കേണ്ട ചോദ്യം കൊടുക്കേണ്ടിടത്ത് question എന്ന ചരം കൊടുത്തിരിക്കുന്നത് ശ്രദ്ധിക്കുക. ഈ ചരത്തിന്റെ വില (മൂല്യം, value) നാം ഏഴാമത്തെ വരിയില്‍ + ഉപയോഗിച്ച് തയ്യാറാക്കിയ string ആണ്. പ്രോഗ്രാമില്‍ ഏതെങ്കിലും വില വേണ്ടതായ സ്ഥലങ്ങളിലൊക്കെ അതിനു പകരം അതേ വിലയുള്ള ചരം ഉപയോഗിക്കാം. ഇവിടെ നാം ചെയ്തിരിക്കുന്നതും ഇതുതന്നെ.

പ്രോഗ്രാമിന്റെ പതിനൊന്നാമത്തെ വരിയില്‍ നടപ്പുവര്‍ഷം ഏതെന്ന് current_year എന്ന ചരത്തില്‍ സൂക്ഷിച്ചുവെയ്ക്കുന്നു. അര്‍ത്ഥവത്തായ പേരുകളുള്ള ചരങ്ങളുടെ ഉപയോഗം പ്രോഗ്രാം വായന സുകരമാക്കാന്‍ സഹായിക്കുന്നു. നമ്മുടെ പ്രോഗ്രാം വളരെ ചെറിയ ഒന്നായതുകൊണ്ട് ഇങ്ങനെ ചെയ്യുന്നതുകൊണ്ട് — 2010 എന്ന് നേരിട്ട് പറയുന്നതിനു പകരം current_year എന്ന ചരത്തില്‍ ഈ വില സൂക്ഷിച്ചുവെച്ച് നടപ്പുവര്‍ഷം വേണ്ടിടത്തെല്ലാം ഈ ചരം ഉപയോഗിക്കുന്നതുകൊണ്ട് — ഉള്ള പ്രയോജനം എന്താണെന്നത് അത്രകണ്ട് വ്യക്തമല്ല. എന്നാല്‍ കുറച്ചു വലിയ ഒരു പ്രോഗ്രാമിലോ? പേരില്ലാത്ത കുറെയേറെ സംഖ്യകള്‍ പ്രോഗ്രാമില്‍ ഉണ്ടെങ്കില്‍ അത് പ്രോഗ്രാം വായിക്കുന്ന ആളെ കുഴക്കാനേ ഉപകരിക്കൂ. ഓരോ സംഖ്യയും എന്തര്‍ത്ഥത്തിലാണ് ഉപയോഗിച്ചിരിക്കുന്നത് എന്നറിയാന്‍ ആ സംഖ്യ എവിടെയൊക്കെയാണ് ഉപയോഗിച്ചിരിക്കുന്നതെന്ന് കണ്ടുപിടിച്ച് തല പുകയ്ക്കേണ്ടിവരും. അതുകൊണ്ടുതന്നെ ഇങ്ങനെയുള്ള സംഖ്യക്ളെ അര്‍ത്ഥം വ്യക്തമാകുന്ന രീതിയിലുള്ള പേരുകള്‍ കൊടുത്ത് പ്രോഗ്രാമില്‍ ഉപയോഗിക്കുന്നതാണ് മെച്ചം, ഇവിടെ ചെയ്തതുപോലെ.

പ്രോഗ്രാമിന്റെ പതിമൂന്നാമത്തെ വരിയില്‍ ഉപയോക്താവ് ജനിച്ച വര്‍ഷം കണ്ടുപിടിക്കാനായി നടപ്പുവര്‍ഷത്തില്‍നിന്ന് വയസ് കുറയ്ക്കുന്നു. അവസാനത്തെ രണ്ടു വരികളില്‍ ഇങ്ങനെ കിട്ടിയ ഉത്തരം ഔട്പുട്ട് ചെയ്യുകയും ചെയ്യുന്നു.

ബഗ്!


ഇത് താരതമ്യേന വളരെ ചെറിയതായ, ലളിതമായ ഒരു പ്രോഗ്രാം ആണ്. "Free" അവതരിപ്പിച്ച പ്രവര്‍ത്തനത്തിന് ഈ പ്രോഗ്രാം മതിയായ ഉത്തരവും ആണ്. എന്നാല്‍ ഈ പ്രോഗ്രാമിന് അത്ര ചെറുതല്ലാത്ത ഒരു പ്രശ്നം ഉണ്ട്. ഈ പ്രശ്നം കാരണം ഒട്ടേറെപ്പേരുടെ കാര്യത്തില്‍ ഈ പ്രോഗ്രാം തെറ്റായ ഉത്തരം തരും! ഒന്നാന്തരം ഒരു ബഗ് (കീടം?) നമ്മുടെ പ്രോഗ്രാമില്‍ ഉണ്ട് എന്നര്‍ത്ഥം. ഇതുപോലെയുള്ള പ്രശ്നങ്ങള്‍ പ്രോഗ്രാമിന്റെ ലോജിക്കില്‍ നുഴഞ്ഞുകയറാതെ ശ്രദ്ധിക്കാന്‍ പഠിക്കുക എന്നത് നല്ല രീതിയില്‍ പ്രോഗ്രാം എഴുതാന്‍ പഠിക്കുന്നതിന്റെ അതിപ്രധാനമായ ഭാഗമാണ്. ഒരാള്‍ ജനിച്ച വര്‍ഷം കണ്ടുപിടിക്കാനുള്ള മുകളില്‍ക്കൊടുത്ത പ്രോഗ്രാം എപ്പോഴൊക്കെയാണ് തെറ്റായ ഉത്തരം തരുന്നത് എന്ന് ആലോചിച്ചു നോക്കൂ. ഒരു പത്തുമിനിട്ട് മനസ്സിരുത്തി ആലോചിച്ച്, പ്രോഗ്രാമിന് കിട്ടാവുന്ന പല തരത്തിലുള്ള (ശരിയായ) ഇന്‍പുട്ടുകള്‍ ഏതൊക്കെയാണ്, അവയ്ക്കെല്ലാം പ്രോഗ്രാം ശരിയായ മറുപടി തരുമോ എന്നൊക്കെ തിരിച്ചും മറിച്ചും ചിന്തിച്ചുനോക്കി പ്രശ്നം പിടികിട്ടുന്നില്ലെങ്കില്‍ മാത്രം അടുത്ത ഖണ്ഡിക നോക്കുക.

...
...
...
...
...
...

നാം പ്രോഗ്രാം പ്രവര്‍ത്തിപ്പിക്കുന്നത് 2010 ഓഗസ്റ്റ് തുടക്കത്തില്‍ ആണെന്ന് കരുതുക. പ്രോഗ്രാമിലെ പ്രശ്നം എന്താണെന്ന് മനസ്സിലാക്കാന്‍ ഹരി, ജോണ്‍ എന്ന രണ്ടു സുഹൃത്തുക്കളുടെ കാര്യമെടുക്കാം. ഹരിക്ക് പ്രായം 15 വയസും 10 മാസവും. ജോണിന് 15 വയസും 2 മാസവും (അതുകൊണ്ടു തന്നെ മാത്സ് ബ്ളോഗിനു പിന്നിലെ ഹരി, ജോണ്‍ സാറന്മാരല്ല ഇവരെന്ന് മനസ്സിലായല്ലോ.). നമ്മുടെ പ്രോഗ്രാമിന്റെ ചോദ്യത്തിന് രണ്ടുപേരും 15 എന്ന് ഉത്തരം കൊടുക്കും. രണ്ടുപേരും ജനിച്ചത് 1995-ല്‍ ആണെന്ന് പ്രോഗ്രാം പറയുകയും ചെയ്യും. ജോണിന്റെ കാര്യത്തില്‍ ഇത് ശരിയാണ്. ഹരിയുടെ കാര്യത്തില്‍ ശരിയല്ലതാനും! ഹരി ജനിച്ചത് 1994 സെപ്റ്റംബര്‍ അവസാനം ആണ്.

ഈ കീടത്തെ എങ്ങനെ ശരിപ്പെടുത്താം?


ബഗ് ഉണ്ടെന്ന് മനസ്സിലായ സ്ഥിതിക്ക് അത് ഒഴിവാക്കുന്ന തരത്തില്‍ പ്രോഗ്രാം തിരുത്തി എഴുതേണ്ടത് നമ്മുടെ കടമയാണ് (ഈ പ്രക്രിയയെ "കീടോച്ഛാടനം" എന്നു വിളിക്കാമോ?). ഹരിയുടെ കാര്യത്തില്‍ പ്രോഗ്രാമില്‍നിന്ന് തെറ്റായ ഉത്തരം കിട്ടാന്‍ എന്താണ് കാരണം? പ്രോഗ്രാമിന് ശരിയായ ഉത്തരം കണ്ടുപിടിക്കാന്‍ ആവശ്യമായ വിവരങ്ങള്‍ എല്ലാം ഇന്‍പുട്ട് ആയി നാം കൊടുക്കാത്തതുതന്നെ. വയസിന്റെ കുറച്ചുകൂടി കൃത്യമായ വിവരം — എത്ര വര്‍ഷം എന്നതിന് പുറമേ എത്ര മാസം എന്നതുകൂടി — ഇന്‍പുട്ട് ആയി പ്രോഗ്രാമിന് കിട്ടിയാല്‍ മേല്‍പ്പറഞ്ഞ തെറ്റ് ഒഴിവാക്കുന്ന പ്രോഗ്രാം നമുക്കെഴുതാം. ഇങ്ങനെയുള്ള ഒരു പ്രോഗ്രാമിന്റെ ലോജിക് ഏകദേശം ഇതുപോലെയിരിക്കും:

  1. ഉപയോക്താവിന്റെ പ്രായം എത്ര വര്‍ഷം, എത്ര മാസം എന്നത് ചോദിച്ച് മനസ്സിലാക്കുക.
    • വര്‍ഷത്തിനെ years എന്ന ചരത്തില്‍ സൂക്ഷിച്ചു വെയ്ക്കുക.
    • മാസത്തിനെ months എന്ന ചരത്തില്‍ സൂക്ഷിച്ചു വെയ്ക്കുക.
  2. നടപ്പുവര്‍ഷവും മാസവും current_year , current_month എന്ന ചരങ്ങളില്‍ സൂക്ഷിച്ചു വെയ്ക്കുക.
  3. months എന്നതിന്റെ വില current_month എന്നതിന്റെ വിലയേക്കാള്‍ കുറവാണെങ്കില്‍
    • current_year - years എന്നതാണ് ഉപയോക്താവ് ജനിച്ച വര്‍ഷം; ഈ വിലയെ year_of_birth എന്ന ചരത്തില്‍ സൂക്ഷിച്ചു വെയ്ക്കുക.
  4. മറിച്ച്, months എന്നതിന്റെ വില current_month എന്നതിന്റെ വിലയ്ക്ക് തുല്യമോ അതില്‍ കൂടുതലോ ആണെങ്കില്‍
    • current_year - years - 1 എന്നതാണ് ഉപയോക്താവ് ജനിച്ച വര്‍ഷം; ഈ വിലയെ year_of_birth എന്ന ചരത്തില്‍ സൂക്ഷിച്ചു വെയ്ക്കുക.
  5. year_of_birth എന്ന ചരത്തിന്റെ വിലയാണ് ഉപയോക്താവ് ജനിച്ച വര്‍ഷം എന്ന് ഉത്തരം പറയുക.


പ്രവര്‍ത്തനങ്ങള്‍

പ്രവ. 1.
ഈ ലോജിക് ശ്രദ്ധിച്ച് വായിക്കുക. ഇത് ഹരി ജനിച്ച വര്‍ഷം ശരിയായി കണ്ടുപിടിക്കുമോ എന്ന് ചിന്തിക്കുക.
പ്രവ. 2.
ഇപ്പറഞ്ഞ ലോജിക് എങ്ങനെ ഒരു പ്രോഗ്രാം ആയി എഴുതാം എന്ന് ആലോചിക്കുക.


if ... else


മുകളിലുള്ള ലോജിക്കിന് ആകെ അഞ്ചു ഭാഗങ്ങള്‍ ഉള്ളതില്‍ ആദ്യത്തെ രണ്ടു ഭാഗങ്ങള്‍ പ്രോഗ്രാമില്‍ എഴുതേണ്ടതെങ്ങനെ എന്ന് നമുക്കറിയാം – മുമ്പു കണ്ട പ്രോഗ്രാമുകളില്‍ നാം ഇതേപോലെയുള്ള കാര്യങ്ങള്‍ ചെയ്തിട്ടുണ്ട്. ലോജിക്കിന്റെ അഞ്ചാമത്തെ ഭാഗവും — കണ്ടുപിടിച്ച ഉത്തരം ഉപയോക്താവിന് പറഞ്ഞുകൊടുക്കുക എന്നുള്ളത് — ഇപ്പോള്‍ നമുക്ക് നിഷ്പ്രയാസം ചെയ്യാന്‍ അറിയാം.

പ്രശ്നക്കാരായിട്ട് ഉള്ളത് മൂന്നും നാലും ഭാഗങ്ങളാണ്: ഒരു പ്രത്യേക കാര്യം — months എന്നതിന്റെ വില current_month എന്നതിന്റെ വിലയേക്കാള്‍ കുറവാണോ എന്നത് — ശരിയാണോ എന്ന് പരിശോധിച്ച്, ഇത് ശരിയാണെങ്കില്‍ ഒരു കാര്യവും, തെറ്റാണെങ്കില്‍ വേറൊരു കാര്യവും ചെയ്യുക എന്നതാണ് ഈ രണ്ട് ഭാഗങ്ങളില്‍ സംഭവിക്കുന്നത്. ഇത് എങ്ങനെയാണ് പ്രോഗ്രാമില്‍ എഴുതുക എന്ന് നാം ഇതുവരെയുള്ള പാഠങ്ങളില്‍ പഠിച്ചിട്ടില്ല. ഇക്കാര്യം ഈ പാഠത്തില്‍ പഠിക്കാം.

നാം ഇതുവരെ കണ്ട പൈത്തണ്‍ പ്രോഗ്രാമുകളെല്ലാം ഒരു നേര്‍രേഖാ സ്വഭാവം ഉള്ളവയാണ്: പ്രോഗ്രാമിന്റെ പ്രവര്‍ത്തനം തുടങ്ങിയാല്‍പ്പിന്നെ പ്രോഗ്രാമിലെ ഓരോ വരിയും പ്രോഗ്രാമില്‍ എഴുതിയിരിക്കുന്ന ക്രമത്തില്‍ പ്രവര്‍ത്തിച്ചുപോകുക എന്ന രീതിയാണ് അവയ്ക്കൊക്കെ ഉള്ളത്. ഇങ്ങനെ "നേര്‍ബുദ്ധി" മാത്രമുള്ള പ്രോഗ്രാമുകളെക്കൊണ്ട് വളരെ പരിമിതങ്ങളായ കാര്യങ്ങളേ ചെയ്യാന്‍ കഴിയൂ. ഇങ്ങനെയല്ലാത്ത — രേഖീയമല്ലാത്ത — രീതിയില്‍ പ്രോഗ്രാം പ്രവര്‍ത്തിപ്പിക്കാനുള്ള പൈത്തണ്‍ ഭാഷാരൂപങ്ങളില്‍ ഏറ്റവും ലളിതമായതാണ് if ... else എന്ന പ്രയോഗം.
ഒരു വ്യവസ്ഥ (condition) ശരിയാണോ എന്ന് പരിശോധിച്ച്, ശരിയാണെങ്കില്‍ ഒരു കൂട്ടം കാര്യങ്ങളും, തെറ്റാണെങ്കില്‍ മറ്റൊരുകൂട്ടം കാര്യങ്ങളും ചെയ്യാന്‍ പൈത്തണില്‍ (മറ്റു പ്രോഗ്രാമിംഗ് ഭാഷകളിലും) ഉള്ള ഉപാധിയാണ് if ... else എന്ന പ്രയോഗം. ഉദാഹരണമായി, if ... else ഉപയോഗിച്ച് ഒരു സംഖ്യ ഒറ്റസംഖ്യയോ ഇരട്ടസംഖ്യയോ എന്ന് കണ്ടുപിടിക്കുന്ന ഒരു പ്രോഗ്രാം ഇതാ. രണ്ടാം പാഠത്തില്‍ നാം പരിചയപ്പെട്ട ശിഷ്ടം കാണാനുള്ള % എന്ന സംകാരകവും (operator) ഇവിടെ ഉപയോഗിച്ചിരിക്കുന്നു:





ഈ പ്രോഗ്രാമില്‍ എട്ടു മുതല്‍ പതിനൊന്നു വരെയുള്ള വരികളിലാണ് if ... else ഉള്ളത്. ഈ വരികളില്‍ എന്താണ് ചെയ്യുന്നതെന്ന് നമുക്ക് വിശദമായി നോക്കാം:

  1. എട്ടും ഒന്‍പതും വരികളില്‍ ചെയ്യുന്നത് ഇതാണ്: number എന്ന ചരത്തില്‍ സൂക്ഷിച്ചിരിക്കുന്ന സംഖ്യയെ രണ്ടു കൊണ്ടു ഹരിച്ചാല്‍ ശിഷ്ടം പൂജ്യമാണെങ്കില്‍ number ഇരട്ടസംഖ്യയാണെന്ന് പറയുക.
    • എട്ടാമത്തെ വരിയില്‍ ശരിയാണോ എന്ന് പരിശോധിക്കേണ്ട വ്യവസ്ഥ if എന്നതിനു ശേഷവും : എന്നതിനു മുമ്പായും കൊടുത്തിരിക്കുന്നു.
      • % എന്ന ചിഹ്നം പൈത്തണില്‍ ശിഷ്ടം കാണാനുള്ള സംകാരകത്തെ സൂചിപ്പിക്കുന്നു. (number % 2) എന്ന വ്യഞ്ജകത്തിന്റെ വില number -നെ രണ്ടുകൊണ്ടു ഹരിച്ചാല്‍ ശിഷ്ടം കിട്ടുന്ന സംഖ്യയാണ്. ഇത് പൂജ്യമോ ഒന്നോ ആയിരിക്കും (എന്തുകൊണ്ട്?).
      • == എന്ന ചിഹ്നം (രണ്ടു സമചിഹ്നങ്ങള്‍ അടുപ്പിച്ച് എഴുതിയത്) പൈത്തണില്‍ തുല്യത പരിശോധിക്കുന്ന സംകാരകത്തെ സൂചിപ്പിക്കുന്നു.
      • എട്ടാമത്തെ വരി വായിക്കേണ്ടത് " number-നെ രണ്ടുകൊണ്ട് ഹരിച്ചാല്‍ ശിഷ്ടം പൂജ്യമാണെങ്കില്‍ " എന്നാണ്.
    • വ്യവസ്ഥ ശരിയാണെങ്കില്‍ ചെയ്യേണ്ട കാര്യങ്ങള്‍ — number ഇരട്ടസംഖ്യയാണെന്ന് പറയുക എന്നുള്ളത് — if ... : കഴിഞ്ഞുള്ള വരിയില്‍ വലതുവശത്തേക്ക് കുറച്ച് മാറ്റി കൊടുത്തിരിക്കുന്നു.
  2. പത്തും പതിനൊന്നും വരികളില്‍ ചെയ്യുന്നത് ഇതാണ്: എട്ടാമത്തെ വരിയില്‍ പരിശോധിച്ച വ്യവസ്ഥ — number എന്ന ചരത്തില്‍ സൂക്ഷിച്ചിരിക്കുന്ന സംഖ്യയെ രണ്ടു കൊണ്ടു ഹരിച്ചാല്‍ ശിഷ്ടം പൂജ്യമാണോ എന്നത് — തെറ്റാണെങ്കില്‍ number ഒറ്റസംഖ്യയാണെന്ന് പറയുക.
    • "എട്ടാമത്തെ വരിയിലെ if -ല്‍ പരിശോധിച്ച വ്യവസ്ഥ തെറ്റാണെങ്കില്‍" എന്ന് പ്രോഗ്രാമില്‍ ചുരുക്കിപ്പറയാനായി else : എന്ന് പ്രയോഗിക്കുന്നു.
    • ഈ വ്യവസ്ഥ തെറ്റുമ്പോള്‍ ചെയ്യേണ്ട കാര്യങ്ങള്‍ — number ഒറ്റസംഖ്യയാണെന്ന് പറയുക എന്നുള്ളത് — else : കഴിഞ്ഞുള്ള വരിയില്‍ വലതുവശത്തേക്ക് കുറച്ച് മാറ്റി കൊടുത്തിരിക്കുന്നു.

if ... else : വിശദമായി

if ... else പ്രോഗ്രാമില്‍ ഉപയോഗിക്കുന്ന വിധം നമുക്ക് കുറച്ചുകൂടി വിശദമായി പരിശോധിക്കാം:
  1. if വരിയുടെ വ്യാകരണം ഇതാണ്: if condition : . ഇവിടെ condition എന്നത് നമുക്ക് ശരിയോ തെറ്റോ എന്ന് അറിയേണ്ടതായ വ്യവസ്ഥ ആണ്. മുകളിലെ ഉദാഹരണത്തില്‍ ഈ വ്യവസ്ഥ (number % 2) == 0 എന്നതാണ്. condition കഴിഞ്ഞുള്ള : പ്രത്യേകം ശ്രദ്ധിക്കുക .
  2. if വരി കഴിഞ്ഞുള്ള വരികളില്‍ condition എന്ന വ്യവസ്ഥ ശരിയാണെങ്കില്‍ ചെയ്യേണ്ടതായ കാര്യങ്ങള്‍ എഴുതണം. ഇത് ഒന്നിലധികം വരികളും ആവാം. ഇങ്ങനെയുള്ള വരികള്‍ എല്ലാം തന്നെ ഈ if വരിയെ അപേക്ഷിച്ച് ഒരു നിശ്ചിത അകലം വലതുവശത്തേക്ക് മാറി ആയിരിക്കണം തുടങ്ങേണ്ടത്.
  3. മുകളിലെ ഉദാഹരണത്തില്‍ നാലു സ്പേസ് വലത്തേക്ക് മാറിയാണ് എഴുതിയിട്ടുള്ളത് (ഒന്‍പതാമത്തെ വരി). ഇങ്ങനെ നാലു സ്പേസ് വിട്ടെഴുതുന്നതാണ് പൈത്തണ്‍ മാനകം (standard).
  4. IDLE ഉപയോഗിച്ച് പ്രോഗ്രാം എഴുതുകയാണെങ്കില്‍ if condition : എന്നെഴുതി Enter അമര്‍ത്തുമ്പോള്‍ IDLE തനിയെ തന്നെ എഴുതിത്തുടങ്ങാനുള്ള സൂചകം (cursor) പുതിയ വരിയില്‍ നാലു സ്പേസ് വലത്തേക്ക് മാറ്റിത്തരുന്നത് കാണാം. ഇതൊന്ന് പരീക്ഷിച്ചു നോക്കൂ! ഇങ്ങനെ മാറുന്നില്ലെങ്കില്‍ തൊട്ടുമുമ്പത്തെ വരിയുടെ വ്യാകരണം തെറ്റിയതാവും കാരണം. മിക്കവാറും ഇത് അവസാനം കൊടുക്കേണ്ടതായ : വിട്ടുപോയതുകൊണ്ടാവും.
  5. if -ല്‍ പരിശോധിച്ച വ്യവസ്ഥ ശരി ആണെങ്കില്‍ ചെയ്യേണ്ടതായ കാര്യങ്ങള്‍ എഴുതിക്കഴിഞ്ഞാല്‍ പിന്നീടുള്ള വരി if വരി തുടങ്ങുന്ന അതേ അകലം ഇടതുവശത്തുനിന്ന് വിട്ട് വേണം തുടങ്ങാന്‍. അതായത്, നാലു സ്പേസ് വലത്തേക്ക് മാറി എഴുതുന്നത് നിര്‍ത്തണം എന്നര്‍ത്ഥം. if വ്യവസ്ഥ ശരി ആണെങ്കില്‍ ചെയ്യേണ്ടതായ കാര്യങ്ങള്‍ ഏതൊക്കെയാണെന്ന് പൈത്തണ്‍ മനസ്സിലാക്കുന്നത് if -നു ശേഷം if -ന്റെ അതേ നിരപ്പിലുള്ള ആദ്യത്തെ വരി കാണുന്നതിന് മുന്‍പായി നാലു സ്പേസ് വലത്തേക്ക് മാറി വരുന്ന വരികള്‍ ഏതൊക്കെയാണ് എന്ന് നോക്കിയിട്ടാണ്.
  6. മുകളിലെ ഉദാഹരണത്തില്‍ if വ്യവസ്ഥ ശരി ആണെങ്കില്‍ ചെയ്യേണ്ടതായ ഒരേ ഒരു കാര്യമേ ഉള്ളൂ — number ഇരട്ടസംഖ്യയാണെന്ന് പറയുക എന്നത്. ഈ ഒരു വരി മാത്രം (ഒന്‍പതാമത്തെ വരി) അതുകൊണ്ട് നാലു സ്പേസ് വലത്തേക്ക് തള്ളി എഴുതിയിരിക്കുന്നു.
  7. else വരിയുടെ വ്യാകരണം ഇതാണ്: else : . else കഴിഞ്ഞുള്ള : പ്രത്യേകം ശ്രദ്ധിക്കുക .
  8. else -ന്റെ അതേ നിരപ്പില്‍ എഴുതിയിട്ടുള്ള, തൊട്ടു മുന്‍പുള്ള if വരിയുടെ വ്യവസ്ഥ തെറ്റാണെങ്കില്‍ ചെയ്യേണ്ടതായ കാര്യങ്ങളാണ് else വരി കഴിഞ്ഞ് എഴുതേണ്ടത്. ഇത് ഒന്നിലധികം വരികളും ആവാം. ഇങ്ങനെയുള്ള വരികള്‍ എല്ലാം തന്നെ ഈ else വരിയെ അപേക്ഷിച്ച് ഒരു നിശ്ചിത അകലം വലതുവശത്തേക്ക് മാറി ആയിരിക്കണം തുടങ്ങേണ്ടത്.
  9. മുകളിലെ ഉദാഹരണത്തില്‍ പൈത്തണ്‍ മാനകത്തിനനുസരിച്ച് നാലു സ്പേസ് വലത്തേക്ക് മാറിയാണ് എഴുതിയിട്ടുള്ളത് (പതിനൊന്നാമത്തെ വരി).
  10. IDLE ഉപയോഗിച്ച് പ്രോഗ്രാം എഴുതുകയാണെങ്കില്‍ else : എന്നെഴുതി Enter അമര്‍ത്തുമ്പോള്‍ IDLE തനിയെ തന്നെ എഴുതിത്തുടങ്ങാനുള്ള സൂചകം (cursor) പുതിയ വരിയില്‍ നാലു സ്പേസ് വലത്തേക്ക് മാറ്റിത്തരുന്നത് കാണാം. പരീക്ഷിച്ചു നോക്കുക. ഇങ്ങനെ മാറുന്നില്ലെങ്കില്‍ തൊട്ടുമുമ്പത്തെ വരിയുടെ വ്യാകരണം തെറ്റിയതാവും കാരണം. മിക്കപ്പോഴും ഇത് അവസാനം കൊടുക്കേണ്ടതായ : വിട്ടുപോയതുകൊണ്ടാവും.
  11. if -ല്‍ പരിശോധിച്ച വ്യവസ്ഥ തെറ്റാണെങ്കില്‍ ചെയ്യേണ്ടതായ കാര്യങ്ങള്‍ എഴുതിക്കഴിഞ്ഞാല്‍ പിന്നീടുള്ള വരി if വരി തുടങ്ങുന്ന അതേ അകലം ഇടതുവശത്തുനിന്ന് വിട്ട് വേണം തുടങ്ങാന്‍. അതായത്, നാലു സ്പേസ് വലതേക്ക് മാറി എഴുതുന്നത് നിര്‍ത്തണം എന്നര്‍ത്ഥം. if വ്യവസ്ഥ തെറ്റാണെങ്കില്‍ ചെയ്യേണ്ടതായ കാര്യങ്ങള്‍ ഏതൊക്കെയാണെന്ന് പൈത്തണ്‍ മനസ്സിലാക്കുന്നത് else -നു ശേഷവും else -ന്റെ അതേ നിരപ്പിലുള്ള ആദ്യത്തെ വരി കാണുന്നതിന് മുന്‍പും നാലു സ്പേസ് വലത്തേക്ക് മാറി വരുന്ന വരികള്‍ ഏതൊക്കെയാണ് എന്ന് നോക്കിയിട്ടാണ്.
  12. മുകളിലെ ഉദാഹരണത്തില്‍ if വ്യവസ്ഥ തെറ്റാണെങ്കില്‍ ചെയ്യേണ്ടതായ ഒരേ ഒരു കാര്യമേ ഉള്ളൂ — number ഒറ്റസംഖ്യയാണെന്ന് പറയുക എന്നത്. ഈ ഒരു വരി മാത്രം (പതിനൊന്നാമത്തെ വരി) അതുകൊണ്ട് നാലു സ്പേസ് വലത്തേക്ക് തള്ളി എഴുതിയിരിക്കുന്നു.
  13. ഇവിടെ നാലു സ്പേസ് എന്ന് പറഞ്ഞയിടത്തൊക്കെ അതിനു പകരം വേറെ ഏതെങ്കിലും ഒരു നിശ്ചിത അകലം ഇതേ ആവശ്യത്തിന് ഉപയോഗിക്കാം. ഉദാഹരണത്തിന്, ഒരു ടാബ് (കംപ്യൂട്ടറിന്റെ Tab കീ അമര്‍ത്തിയാല്‍ കിട്ടുന്നത്) ഇതിനായി ഉപയോഗിക്കാം. ഒരേ പ്രോഗ്രാമില്‍ ടാബുകളും സ്പേസുകളും രണ്ടുംകൂടി ഈ ആവശ്യത്തിന് ഉപയോഗിക്കരുത്. ഈ ആവശ്യത്തിന് നാലു സ്പേസ് ഉപയോഗിക്കുന്നതാണ് നല്ല പൈത്തണ്‍ ശൈലിയായി കണക്കാക്കുന്നത്.
  14. if ... else -ലെ else ആവശ്യമില്ലെങ്കില്‍ വിട്ടുകളയാവുന്നതാണ് (optional). (തികച്ചും കൃത്രിമമായ ഒരു) ഉദാഹരണമായി, തന്നിരിക്കുന്ന സംഖ്യ ഇരട്ടസംഖ്യയാണെങ്കില്‍ അത് വിളിച്ചുപറയുകയും ഒറ്റസംഖ്യയാണെങ്കില്‍ ഒന്നും പറയാതിരിക്കുകയും ചെയ്യുന്ന ഒരു പ്രോഗ്രാം ഇതാ:



    ഒറ്റയും ഇരട്ടയും സംഖ്യകള്‍ ഈ പ്രോഗ്രാമിന് ഇന്‍പുട്ട് ആയി കൊടുക്കുമ്പോള്‍ എന്താണ് സംഭവിക്കുന്നത് എന്ന് പ്രവര്‍ത്തിപ്പിച്ചു കണ്ടുപിടിക്കൂ.

തുലന സംകാരകങ്ങള്‍


ഒരു സംഖ്യ ഒറ്റയോ ഇരട്ടയോ എന്ന് കണ്ടുപിടിക്കാനുള്ള പ്രോഗ്രാമില്‍ നാം == എന്ന തുല്യത പരിശോധിക്കാനുള്ള സംകാരകം (operator) ഉപയോഗിച്ചല്ലോ. == -നു പുറമേ മറ്റ് തുലനസംകാരകങ്ങളും (comparison operators) പൈത്തണില്‍ ലഭ്യമാണ്. ഈ സംകാരകങ്ങള്‍ എല്ലാംതന്നെ True, False എന്നീ രണ്ടു പ്രത്യേക മൂല്യങ്ങള്‍ ഉത്തരമായി തരുന്നവയാണ്. പേര് സൂചിപ്പിക്കുന്നതുപോലെ തന്നെ ശരി, തെറ്റ് എന്നീ അര്‍ത്ഥങ്ങളാണ് യഥാക്രമം True, False എന്ന മൂല്യങ്ങള്‍ക്ക് പൈത്തണില്‍ ഉള്ളത്. == എന്ന സംകാരകം നമുക്ക് ഒറ്റനോട്ടത്തില്‍ തോന്നുന്നതുപോലെ തന്നെയാണ് പെരുമാറുന്നതും: a, b എന്നിവ സ്ഥിരാങ്കങ്ങളോ (constants) ചരങ്ങളോ ആയിക്കൊള്ളട്ടെ. a == b എന്നതിന്റെ വില

  • a, b എന്നിവയുടെ വിലകള്‍ രണ്ടും തുല്യമാണെങ്കില്‍ True ആയിരിക്കും.
  • a, b എന്നിവയുടെ വിലകള്‍ രണ്ടും തുല്യമല്ലെങ്കില്‍ False ആയിരിക്കും.

പൈത്തണ്‍ പ്രോഗ്രാമുകളില്‍ ധാരാളമായി ഉപയോഗിക്കുന്ന ചില തുലനസംകാരകങ്ങളുടെ പ്രയോഗം വ്യക്തമാക്കുന്ന പട്ടിക. ഇവിടെ a, b എന്നിവ സ്ഥിരാങ്കങ്ങളോ (constants) ചരങ്ങളോ (variables) ആകാം:
പൈത്തണിലെ ചില തുലനസംകാരകങ്ങള്‍
തുലന സംകാരകംപ്രയോഗംരണ്ടാം കോളത്തിലെ വ്യഞ്ജകത്തിന്റെ വില
True ആകുന്നത് False ആകുന്നത്
== a == b a, b എന്നിവയുടെ വിലകള്‍ തുല്യമാണെങ്കില്‍ a, b എന്നിവയുടെ വിലകള്‍ തുല്യമല്ലെങ്കില്‍
!= a != b a, b എന്നിവയുടെ വിലകള്‍ തുല്യമല്ലെങ്കില്‍ a, b എന്നിവയുടെ വിലകള്‍ തുല്യമാണെങ്കില്‍
< a < b a -യുടെ വില b -യുടെ വിലയെക്കാള്‍ കുറവാണെങ്കില്‍ a -യുടെ വില b -യുടെ വിലയെക്കാള്‍ കുറവല്ലെങ്കില്‍
> a > b a -യുടെ വില b -യുടെ വിലയെക്കാള്‍ കൂടുതലാണെങ്കില്‍ a -യുടെ വില b -യുടെ വിലയെക്കാള്‍ കൂടുതലല്ലെങ്കില്‍
<= a <= b a -യുടെ വില b -യുടെ വിലയ്ക്ക് തുല്യമോ അതില്‍ കുറവോ ആണെങ്കില്‍ a -യുടെ വില b -യുടെ വിലയെക്കാള്‍ കൂടുതലാണെങ്കില്‍
>= a >= b a -യുടെ വില b -യുടെ വിലയ്ക്ക് തുല്യമോ അതില്‍ കൂടുതലോ ആണെങ്കില്‍ a -യുടെ വില b -യുടെ വിലയെക്കാള്‍ കുറവാണെങ്കില്‍

== എന്ന സംകാരകത്തെ പ്രോഗ്രാമില്‍ കാണുമ്പോള്‍ ഇംഗ്ളീഷില്‍ വായിക്കുന്നത് "equals" അല്ലെങ്കില്‍ "equal to" എന്നാണ്. != -നെ വായിക്കുന്നത് "not equal to" എന്നും. ഇങ്ങനെയോ തത്തുല്യങ്ങളായ മലയാള വാക്കുകളായോ (ഏതാണ് നമുക്ക് കൂടുതല്‍ സ്വാഭാവികമായി തോന്നുന്നത് എന്നതനുസരിച്ച്) ഈ ചിഹ്നങ്ങളെ വായിക്കാം.

മുമ്പു പറഞ്ഞതുപോലെ, "നേര്‍രേഖാ" പ്രോഗ്രാമുകളെക്കൊണ്ട് കുറച്ചു കാര്യങ്ങളേ ചെയ്യാന്‍ കഴിയൂ. മറ്റു പ്രോഗ്രാമുകളിലൊക്കെ ഒന്നല്ലെങ്കില്‍ മറ്റൊരു രീതിയില്‍ തുലനം (comparison) കടന്നു വരുമെന്ന് ഉറപ്പിക്കാം. അതുകൊണ്ടു തന്നെ ഇനി നാം എഴുതുന്ന പ്രോഗ്രാമുകളിലെല്ലാം ഒരു തുലനസംകാരകമെങ്കിലും ഉപയോഗിക്കേണ്ടി വരും എന്ന് നിസ്സംശയം പറയാം. തുലനസംകാരകങ്ങള്‍ ശരിയായി പ്രയോഗിക്കേണ്ടതെങ്ങനെ എന്ന് അനവധി ഉദാഹരണങ്ങളിലൂടെ നമുക്ക് പഠിച്ചെടുക്കാം.

ഒരു സംഖ്യ ന്യൂനസംഖ്യയാണോ, അധിസംഖ്യയാണോ, ഇനി ഇതു രണ്ടുമല്ല പൂജ്യമാണോ എന്ന് കണ്ടുപിടിക്കുന്ന ഒരു പ്രോഗ്രാം നമുക്കൊന്ന് എഴുതി നോക്കാം:



ഈ പ്രോഗ്രാമില്‍ പല അളവില്‍ സ്പേസ് വിട്ട് വരികള്‍ എഴുതിയിരിക്കുന്നത് ശ്രദ്ധിക്കുക. മുകളില്‍ക്കൊടുത്ത വിശദീകരണം അനുസരിച്ച് ഇത് മനസ്സിലാക്കാന്‍ ശ്രമിക്കുക. സംശയമുണ്ടെങ്കില്‍ ചോദിക്കുക.

ജനിച്ച വര്‍ഷം കണ്ടുപിടിക്കുന്നതെങ്ങനെ? രണ്ടാം പതിപ്പ്


ജോണ്‍, ഹരിമാരുടെ പ്രശ്നം പരിഹരിക്കുന്ന പ്രോഗ്രാം എഴുതാന്‍ വേണ്ടത്ര പൈത്തണ്‍ നാം പഠിച്ചുകഴിഞ്ഞു. പാഠത്തിന്റെ മൂന്നാം ഭാഗത്ത് കൊടുത്ത ലോജിക് ഒരു പ്രോഗ്രാമാക്കി ഒന്ന് എഴുതി നോക്കിയാലോ? ലോജിക് വിശദമായിത്തന്നെ നാം എഴുതിയതുകൊണ്ട് ഇത് പ്രോഗ്രാമാക്കുക എന്നത് തികച്ചും അനായാസം തന്നെ. കുറച്ചു വലിയ പ്രോഗ്രാമുകള്‍ എഴുതാനുള്ള ഏറ്റവും എളുപ്പ വഴിയും ഇതു തന്നെയാണ്: ആദ്യം പ്രോഗ്രാമിന്റെ ലോജിക് നമുക്കിഷ്ടമുള്ള ഭാഷയില്‍ എഴുതുക. പിന്നെ അതിന്റെ ഓരോ ഭാഗവും പൈത്തണിലേക്ക് മൊഴിമാറ്റം നടത്തുക. ഒരു വലിയ പ്രോഗ്രാം ഒറ്റയടിക്ക് പൈത്തണില്‍ എഴുതുന്നതിലും എളുപ്പം — തെറ്റുകള്‍ കുറയ്ക്കാനുള്ള എളുപ്പ വഴിയും — ഇങ്ങനെ ചെയ്യുന്നതാണ്.



പ്രവര്‍ത്തനങ്ങള്‍

പ്രവ. 3.
ഈ പ്രോഗ്രാം ശ്രദ്ധിച്ച് വായിക്കുക. ഇത് പാഠത്തിന്റെ മൂന്നാം ഭാഗത്ത് കൊടുത്ത ലോജിക്കുമായി യോജിച്ചുപോകുന്നുണ്ടോ എന്ന് തിട്ടപ്പെടുത്തുക.
പ്രവ. 4.
ഈ പ്രോഗ്രാം പല തവണ പ്രവര്‍ത്തിപ്പിക്കുക. പല (വര്‍ഷം, മാസം) ജോടികള്‍ക്ക് ഇത് ശരിയായ ഉത്തരം തരുന്നുണ്ടോ എന്ന് പരിശോധിക്കുക.
പ്രവ. 5.
ഈ പ്രോഗ്രാം എപ്പോഴാണ് തെറ്റായ ഉത്തരം തരുന്നത്? മുന്‍പുള്ള പ്രോഗ്രാമിനെ അപേക്ഷിച്ച് ഈ പ്രോഗ്രാം തെറ്റായ ഉത്തരം തരുന്ന അവസരങ്ങള്‍ കൂടുതലോ കുറവോ? ഈ തെറ്റിനെ ഒഴിവാക്കുന്ന രീതിയില്‍ പ്രോഗ്രാം തിരുത്തിയെഴുതുക.

ബൂളിയന്‍ സംകാരകങ്ങള്‍


ശരി, തെറ്റ് ( True, False ) എന്നീ രണ്ട് സ്ഥിരാങ്കങ്ങളെ ബൂളിയന്‍ മൂല്യങ്ങള്‍ (Boolean values)എന്ന് പറയുന്നു. ഈ രണ്ടു വിലകളെ അടിസ്ഥാനപ്പെടുത്തിയുള്ള ലോജിക് വികസിപ്പിച്ചെടുത്ത ഇംഗ്ളീഷ് ഗണിതശാസ്ത്രജ്ഞനായ ജോര്‍ജ് ബൂളിന്റെ ബഹുമാനാര്‍ത്ഥമാണ് ഇത്. തുലന സംകാരകങ്ങള്‍ പ്രയോഗിക്കുമ്പോള്‍ കിട്ടുന്നത് ബൂളിയന്‍ മൂല്യങ്ങളാണല്ലോ. ഇത്തരത്തിലുള്ള മൂല്യങ്ങളെ സംയോജിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന സംകാരകങ്ങളാണ് ബൂളിയന്‍ സംകാരകങ്ങള്‍ (Boolean operators). പേരുകേട്ടാല്‍ ഭയം തോന്നാമെങ്കിലും ഇവ വളരെ ലളിതങ്ങളായ സംഭവങ്ങളാണ്; ഈ പേരിലല്ലെങ്കിലും ഇവയെ നമുക്കെല്ലാവര്‍ക്കും കുട്ടിക്കാലം മുതല്‍ക്കേ പരിചയമുള്ളതാണുതാനും!

പൈത്തണ്‍ പ്രോഗ്രാമുകളില്‍ ധാരാളമായി ഉപയോഗിക്കുന്ന ചില ബൂളിയന്‍ സംകാരകങ്ങളുടെ പ്രയോഗം വ്യക്തമാക്കുന്ന പട്ടിക. ഇവിടെ a, b എന്നിവ True, False എന്നീ വിലകളുള്ള സ്ഥിരാങ്കങ്ങളോ ചരങ്ങളോ ആകാം:
പൈത്തണിലെ ചില ബൂളിയന്‍ സംകാരകങ്ങള്‍
ബൂളിയന്‍ സംകാരകംപ്രയോഗംരണ്ടാം കോളത്തിലെ വ്യഞ്ജകത്തിന്റെ വില
True ആകുന്നത് False ആകുന്നത്
not not a a യുടെ വില False ആണെങ്കില്‍ a യുടെ വില True ആണെങ്കില്‍
and a and b a, b രണ്ടിന്റെയും വിലകള്‍ True ആണെങ്കില്‍ a, b എന്നിവയില്‍ ഒന്നിന്റെയെങ്കിലും വില False ആണെങ്കില്‍
or a or b a, b എന്നിവയില്‍ ഒന്നിന്റെയെങ്കിലും വില True ആണെങ്കില്‍ a, b രണ്ടിന്റെയും വിലകള്‍ False ആണെങ്കില്‍

ബൂളിയന്‍ സംകാരകങ്ങളെക്കുറിച്ച് പ്രത്യേകം ശ്രദ്ധിക്കേണ്ടതായ ഒരു കാര്യം: മുകളിലെ പട്ടിക കണ്ടാല്‍ തോന്നുന്നതിന്റെ പത്തിലൊന്ന് കാഠിന്യം ഇവ പ്രോഗ്രാമില്‍ ഉപയോഗിക്കുമ്പോള്‍ തോന്നുകയില്ല. and, or, not എന്നീ വാക്കുകള്‍ ഇംഗ്ളീഷില്‍ ഉപയോഗിക്കുന്നതുപോലെ തന്നെ പ്രോഗ്രാമിലും രണ്ടാമതൊന്ന് ആലോചിക്കാതെ ഉപയോഗിച്ചു പോവുകയാണ് പതിവ്. കുറച്ച് ഉദാഹരണങ്ങള്‍ കൊണ്ട് ഇത് വ്യക്തമാകും. എപ്പോഴെങ്കിലും സംശയം വന്നാല്‍ ഈ പട്ടിക നോക്കുകയും ചെയ്യാം.

തന്നിരിക്കുന്ന സംഖ്യ 2, 3, 5 ഇവ മൂന്നിന്റേയും ഗുണിതമാണോ എന്ന് പരിശോധിക്കുന്ന ഒരു പ്രോഗ്രാം എഴുതി നോക്കാം:



പ്രവര്‍ത്തനം

പ്രവ. 6.
ഈ പ്രോഗ്രാം ശ്രദ്ധിച്ച് വായിക്കുക. ഇവിടെ സ്പേസ് ഉപയോഗിച്ചിരിക്കുന്ന രീതി ശരിക്ക് മനസ്സിലായി എന്ന് ഉറപ്പുവരുത്തുക. ഓരോ if -ന്റെയും else ഏതാണ്? ഈ പ്രോഗ്രാമിന്റെ ലോജിക് എന്താണ്?


ഇതേ പ്രശ്നത്തിന് ഉത്തരം തരുന്ന മറ്റൊരു പ്രോഗ്രാം നോക്കൂ. പല പ്രാവശ്യം "if ..." എന്നെഴുതുന്നതിനു പകരം ഇവിടെ "and" ഉപയോഗിച്ചിരിക്കുന്നു. ഫലമോ? മുമ്പത്തെ പ്രോഗ്രാമിന്റെയത്ര ദൈര്‍ഘ്യമില്ലാത്തതും വായിച്ചു മനസ്സിലാക്കാന്‍ അത്രതന്നെ പ്രയാസപ്പെടേണ്ടാത്തതുമായ ഒരു പ്രോഗ്രാം. പ്രോഗ്രാമിലെ ഏഴാമത്തെ വരി അധികം വലത്തേക്ക് നീണ്ടു പോകാതിരിക്കാനായി (ബ്രൗസറില്‍ വായിക്കാനുള്ള സൗകര്യത്തിനായി മാത്രം) "\" ഉപയോഗിച്ച് രണ്ടായി മുറിച്ചിരിക്കുന്നു:





പ്രവര്‍ത്തനങ്ങള്‍

പ്രവ. 7.
തന്നിരിക്കുന്ന സംഖ്യ 2, 3, 5 ഇവയില്‍ ഒന്നിന്റെയെങ്കിലും ഗുണിതമാണോ എന്ന് പരിശോധിക്കുന്ന ഒരു പ്രോഗ്രാം എഴുതുക. ഇതിനായി "or" എന്ന ബൂളിയന്‍ സംകാരകം ഉപയോഗിക്കുക.
പ്രവ. 8.
ഏഴാം പ്രവര്‍ത്തനത്തിലെ അതേ പ്രശ്നത്തിനുള്ള പ്രോഗ്രാം "or" ഉപയോഗിക്കാതെ എഴുതുക.

ദ്വിമാന സമവാക്യത്തിന്റെ മൂലം കാണാനുള്ള ഒരു പ്രോഗ്രാം binudigitaleye എന്ന വായനക്കാരന്‍ കമന്റായിട്ടത് ചെറിയ മാറ്റങ്ങളോടെ താഴെ എടുത്തെഴുതുന്നു. IDLE ഉപയോഗിച്ച് ഇത് പല പ്രാവശ്യം പ്രവര്‍ത്തിപ്പിച്ചു നോക്കുക, a, b, c എന്നിവയ്ക്ക് പല വിലകള്‍ (ന്യൂനസംഖ്യകളും ദശാംശ സംഖ്യകളും ഉള്‍പ്പടെ) കൊടുത്തു നോക്കൂ. ശരിയായ ഉത്തരം കിട്ടുന്നുണ്ടോ?



പ്രവര്‍ത്തനങ്ങള്‍

പ്രവ. 9.
(മിശ്ര സംഖ്യകളെ പരിചയമുള്ളവര്‍ക്ക് മാത്രം) ഈ പ്രോഗ്രാം രേഖീയ സംഖ്യകള്‍ (real numbers) മൂലങ്ങളായി വരുന്ന ദ്വിമാന സമവാക്യങ്ങളെ മാത്രമെ ശരിയായി പരിഗണിക്കുന്നുള്ളൂ; മിശ്ര സംഖ്യകള്‍ (complex numbers) മൂലങ്ങളായി വരുന്ന ദ്വിമാന സമവാക്യങ്ങളെ ഒഴുക്കന്‍മട്ടില്‍ അവഗണിച്ചിരിക്കുകയാണ്. ഈ കുറവ് പരിഹരിക്കുക; (ഉദാഹരണമായി) a = 1, b = -2, c = 2 എന്ന ഇന്‍പുട്ട് കിട്ടിയാല്‍ 1 + 1.0 i, 1 - 1.0 i എന്നീ ഉത്തരങ്ങള്‍ തരുന്ന രീതിയില്‍ പ്രോഗ്രാമിനെ മാറ്റുക.


കൂടുതല്‍ പ്രവര്‍ത്തനങ്ങള്‍


if -നെ പരിചയപ്പെട്ട നിലയ്ക്ക് ഇനി നമുക്ക് കൂടുതല്‍ രസകരങ്ങളായ പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്തു തുടങ്ങാം. പ്രോഗ്രാമിംഗ് പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുമ്പോള്‍ പ്രത്യേകം ശ്രദ്ധിക്കേണ്ടതായ ഒരു കാര്യമുണ്ട്: വെറുതേ പ്രോഗ്രാം എഴുതിയതുകൊണ്ടു മാത്രം പ്രവര്‍ത്തനത്തിന്റെ ഫലം നമുക്ക് കിട്ടുന്നില്ല. എഴുതിയ പ്രോഗ്രാമിന് ശരിയായ എന്ത് ഇന്‍പുട്ട് കൊടുത്താലും അത് ശരിയായ ഉത്തരം തരും എന്ന് ഉറപ്പു വരുത്തണം. ഇതിനായി രണ്ടു കാര്യങ്ങള്‍ ചെയ്യണം:

  1. പ്രോഗ്രാം വളരെ ശ്രദ്ധയോടെ, വിമര്‍ശനബുദ്ധ്യാ വായിച്ചുനോക്കണം. നാമെഴുതിയ പ്രോഗ്രാം എന്തുകൊണ്ട് ശരിയാണ് എന്നല്ല നോക്കേണ്ടത്, മറിച്ച് അതിലെ തെറ്റ് എവിടെയാണ് എന്നാണ്. ഇങ്ങനെ കണിശതയോടെ സ്വന്തം പ്രോഗ്രാം വായിക്കാന്‍ പഠിക്കുക എന്നത് തെറ്റില്ലാതെ പ്രോഗ്രാം എഴുതാന്‍ ഒഴിച്ചുകൂടാനാവാത്ത ഒന്നാണ്.
  2. പ്രോഗ്രാമിന് പല തരത്തിലുള്ള ഇന്‍പുട്ടുകള്‍ കൊടുത്ത് പ്രവര്‍ത്തിപ്പിച്ചുനോക്കണം. നാം തന്നെ എഴുതിയ പ്രോഗ്രാം ആയതുകൊണ്ട് അത് ശരിയായ ഉത്തരം തരുന്ന മട്ടിലുള്ള ഇന്‍പുട്ടുകള്‍ കൊടുക്കാനാണ് നമുക്ക് സ്വതവേ തോന്നുക. എന്നാല്‍ ഇങ്ങനെയല്ലാത്ത, പ്രോഗ്രാം തെറ്റിപ്പോകാന്‍ സാധ്യതയുള്ള തരം ഇന്‍പുട്ടുകളും ആലോചിച്ചെടുത്ത് അവ പ്രോഗ്രാമിന് കൊടുത്തുനോക്കണം.

ഇതു വരെ പഠിച്ച പൈത്തണ്‍ ഉപയോഗിച്ച് ചെയ്യാവുന്ന കുറച്ച് പ്രവര്‍ത്തനങ്ങള്‍ ഇതാ:

പ്രവര്‍ത്തനങ്ങള്‍

താഴെപ്പറയുന്ന തരം പ്രോഗ്രാമുകള്‍ എഴുതുക:
പ്രവ. 10.
  • ഇന്‍പുട്ട്: ഒരു കുട്ടിയുടെ ഒരു വിഷയത്തിലുള്ള മാര്‍ക്ക്.
  • ഔട്പുട്ട്: ആ കുട്ടിക്ക് ആ വിഷയത്തില്‍ കിട്ടിയ ഗ്രേഡ്.
മാര്‍ക്കിനെ ഗ്രേഡാക്കി മാറ്റാന്‍ നിങ്ങളുടെ സ്കൂളില്‍ (അല്ലെങ്കില്‍ പരിചയത്തില്‍) ഉപയോഗിക്കുന്ന ഏതെങ്കിലും ഒരു രീതി തെരഞ്ഞെടുക്കുക.
പ്രവ. 11.
  • ഇന്‍പുട്ട്: ഒരു മാസത്തിന്റെ ക്രമസംഖ്യ : 1 മുതല്‍ 12 വരെയുള്ളത്. ഉദാ: 7
  • ഔട്പുട്ട്: ആ മാസത്തിന്റെ പേര്. ഉദാ: July
പ്രവ. 12.
  • ഇന്‍പുട്ട്: ദിവസങ്ങളുടെ എണ്ണം : ഒരു പൂര്‍ണ്ണസംഖ്യ. ഉദാ: 375.
  • ഔട്പുട്ട്: ഒരു വര്‍ഷത്തില്‍ 365 ദിവസം എന്ന കണക്കില്‍ ഇത്രയും ദിവസമെന്നാല്‍ എത്ര വര്‍ഷം, ആഴ്ച, ദിവസം എന്നത്. ഉദാ: 375 days is 1 year, 1 week, and 3 days.
പ്രവ. 13.
  • ഇന്‍പുട്ട്: ഒരു വര്‍ഷം. ഉദാ: 1967.
  • ഔട്പുട്ട്: തന്നിരിക്കുന്ന വര്‍ഷം അധിവര്‍ഷമാണോ (leap year) അല്ലയോ എന്നത്. ഉദാ: 1967 is not a leap year.
ഒരു വര്‍ഷം അധിവര്‍ഷമാണോ എന്ന് കണ്ടുപിടിക്കാനുള്ള ലോജിക് ഇവിടെയുണ്ട് . ഈ പാഠം വായിച്ച ഒരാള്‍ക്ക് എളുപ്പം മനസ്സിലാകുന്ന രീതിയിലാണ് അവിടെ ഈ ലോജിക് (അല്‍ഗോരിതം എന്നതാണ് ശരിയായ വാക്ക്) കൊടുത്തിരിക്കുന്നത്. അവിടെക്കൊടുത്ത ലോജിക്കിനെ നേരിട്ടെന്നോണം പൈത്തണിലേക്ക് എടുത്തെഴുതുകയും ചെയ്യാം.
പ്രവ. 14.
  • ഇന്‍പുട്ട്: ഈ വര്‍ഷത്തിലെ ഒരു ദിവസം — വര്‍ഷം, മാസം, തീയതി എന്ന രീതിയില്‍.
  • ഔട്പുട്ട്: തന്നിരിക്കുന്ന ദിവസത്തിന്റെ അടുത്ത ദിവസം — വര്‍ഷം, മാസം, തീയതി എന്ന രീതിയില്‍.
പ്രവ. 15.
  • ഇന്‍പുട്ട്: ഒരു ദിവസം — വര്‍ഷം, മാസം, തീയതി എന്ന രീതിയില്‍.
  • ഔട്പുട്ട്: തന്നിരിക്കുന്ന ദിവസത്തിന്റെ അടുത്ത ദിവസം — വര്‍ഷം, മാസം, തീയതി എന്ന രീതിയില്‍.
പ്രവ. 16.
  • ഇന്‍പുട്ട്: മൂന്നു സംഖ്യകള്‍.
  • ഔട്പുട്ട്: തന്നിരിക്കുന്നതില്‍വെച്ച് ഏറ്റവും വലിയ സംഖ്യ.
പ്രവ. 17.
  • ഇന്‍പുട്ട്: മൂന്നു സംഖ്യകള്‍.
  • ഔട്പുട്ട്: തന്നിരിക്കുന്നതില്‍വെച്ച് ഏറ്റവും ചെറിയ സംഖ്യ.

കടപ്പാട്: കിരണം

80 comments:

JOHN P A August 3, 2010 at 5:44 AM  

എല്ലാപാഠങ്ങളും പ്രിന്റെടുത്ത് പഠിച്ചുവരുന്നു.പെത്തണ്‍ കഴിഞ്ഞ് ഉബുണ്ടു ജനറല്‍ administration നും പഠിപ്പിക്കണം.ഇതുപോലെ തന്നെ. ഫിലിപ്പ് സാറിനു നന്ദി .

ജനാര്‍ദ്ദനന്‍.സി.എം August 3, 2010 at 5:54 AM  

പ്രവ. 12.

* ഇന്‍പുട്ട്: മൂന്നു സംഖ്യകള്‍.
* ഔട്പുട്ട്: തന്നിരിക്കുന്നതില്‍വെച്ച് ഏറ്റവും ചെറിയ സംഖ്യ.

ഈ ചോദ്യം ആവര്‍ത്തിച്ചിരിക്കുന്നത് ഒഴിവാക്കുക. വിശദമായ അഭിപ്രായങ്ങള്‍ പിന്നീട്

ഫിലിപ്പ് August 3, 2010 at 5:56 AM  

ഈ പാഠത്തിന്റെ പിഡിഎഫ് ഇവിടെ . ശ്രീനാഥ് സാര്‍ തയ്യാറാക്കിയ ആദ്യ നാലു പാഠങ്ങളുടെ മനോഹരമായ ഒറ്റ പിഡിഎഫ് ഫയല്‍ പാഠത്തിന് ഇടതുഭാഗത്തായി കൊടുത്തിരിക്കുന്നത് ശ്രദ്ധിക്കുമല്ലോ.

ജോണ്‍ സാര്‍,

ഉബുണ്ടു അഡ്മിനിസ്ട്രേഷനിലെ പല പുലികളും നമ്മുടെ ബ്ളോഗില്‍ വരുന്നവരില്‍ പെടുമല്ലോ. അവര്‍ക്കാര്‍ക്കെങ്കിലും ഇത് ഇപ്പോഴേ തുടങ്ങാവുന്നതേയുള്ളൂ. പിന്നെ പൈത്തണ്‍ പോലെയൊരു പ്രോഗ്രാമിംഗ് ഭാഷയെ അപേക്ഷിച്ച് അഡ്മിനിസ്ട്രേഷന്‍ പഠിപ്പിക്കാനുള്ള ബുദ്ധിമുട്ടും കൂടുതലാണെന്ന് തോന്നുന്നു. ഒരു സംശയ നിവാരണ ബ്ളോഗ് ആയിരിക്കും പാഠങ്ങളേക്കാള്‍ ഫലപ്രദമെന്നും തോന്നുന്നു.

--ഫിലിപ്പ്

ഫിലിപ്പ് August 3, 2010 at 5:58 AM  

ജനാര്‍ദ്ദനന്‍ സാര്‍,

ചോദ്യം ആവര്‍ത്തിച്ചിട്ടില്ലല്ലോ.

ഫിലിപ്പ് August 3, 2010 at 6:00 AM  

ചോദ്യത്തിന്റെ സംഖ്യ ആവര്‍ത്തിച്ചിരുന്നു. അത് തിരുത്തിയിട്ടുണ്ട്. ജനാര്‍ദ്ദനന്‍ സാറിന് നന്ദി.

--ഫിലിപ്പ്

Nidhin Jose August 3, 2010 at 6:09 AM  

പുതിയ പരീക്ഷണം......
പൂര്‍ണമായ ഒരു വാര്‍ത്ത ബുളളറ്റിന്‍ ...
Govt High School Manjoor: ബ്ലോഗ് ന്യൂസ്
http://ghsmanjoor.blogspot.com/2010/08/blog-post.html

തീര്‍ച്ചയായും സന്ദര്‍ശിക്കണം.....
അഭിപ്രായം കുറിക്കണം.....
ഇന്ന് (3-08-2010) ഈ ബ്ലോഗ് കോട്ടയം ജില്ല ഐടി സംഗമത്തില്‍ ബഹു. വിദ്യാഭ്യാസ മന്ത്രി ശ്രീ എം എ ബേബിയുടെ സാന്നിദ്ധ്യത്തില്‍ പ്രദര്‍ശിപ്പിക്കപ്പെടുന്നു....
സ്ഥലം. ബേക്കര്‍ മെമ്മോറിയല്‍ സ്കൂള്‍ , കോട്ടയം
നോട്ടിസ് ലിങ്ക്
href="http://www.4shared.com/document/XxMhHotJ/IT_Sangamam_colour.html

MURALEEDHARAN.C.R August 3, 2010 at 6:10 AM  

john sir പറഞ്ഞതുപോലെ എല്ലാപാഠങ്ങളും പ്രിന്റെടുത്ത് വെച്ചിട്ടുണ്ട്
പക്ഷെ പഠനം വേണ്ടത്ര പുരോഗമിച്ചിട്ടില്ല.പഠിച്ചുവരുന്നതേയുള്ളു
നന്ദി Philip sir
pdf form ഉടന്‍ ഉണ്ടാകുമെന്ന് പ്രതീക്ഷിയ്ക്കുന്നു

ഹോംസ് August 3, 2010 at 6:25 AM  

അസുഖവും മറ്റു ജോലിത്തിരക്കുകളും മൂലം നാലാംപാഠം പഠിക്കാന്‍ കഴിഞ്ഞില്ല.
ഇനിയിപ്പോള്‍ രണ്ടും കൂടി...
(ആ..ഇതാണ് പണ്ട് മാഷന്മാര്‍ പറഞ്ഞിരുന്നത്, അന്നന്ന് പഠിക്കേണ്ടത് അന്നന്ന്....)
പിന്നെ, മിസ്റ്റര്‍ നിധിന്‍ജോസ്, കാര്യമൊക്കെ കൊള്ളാം. പക്ഷേ നിങ്ങളുടെ മാഞ്ഞൂര്‍പരസ്യം ഇവിടെ വേണ്ട!

Nidhin Jose August 3, 2010 at 6:40 AM  

@ഹോംസ്.....

ഇതോക്കെ മാഷുമ്മാരോട് പങ്കു വച്ചില്ലെങ്കില്‍ പിന്നാരോടാ പറയേണ്ടത്....?

ഇഷ്ടമായില്ലെങ്കില്‍ വേണ്ട...
ഒരാള്‍ കൂടി ഈ അഭിപ്രായം രേഖപ്പെടുത്തിയാല്‍ ആ പരസ്യം ( അങ്ങനെ വിളിക്കാന്‍ ഞാന്‍ ഇഷ്ടപ്പെടുന്നില്ല)
ഡിലീറ്റ് ചെയ്തേക്കാം കേട്ടോ...
തര്‍ക്കിക്കാനൊന്നും ഞാനില്ല... അതിന് ഞാന്‍ ഒരു കാര്യത്തിലും ഒരു തീവ്രവാദിയല്ല....

ഗീതാസുധി August 3, 2010 at 6:43 AM  
This comment has been removed by the author.
ഗീതാസുധി August 3, 2010 at 6:45 AM  

പാഠം മുഴുവനും പിന്നീട് വായിച്ച് അഭിപ്രായവും സംശയവും പറയാം..
ഈ "കീടം" "കീടോച്ഛാടനം" എന്നിവയെപ്പറ്റി കൂടുതല്‍ പഠിക്കാന്‍ രസം തോന്നുന്നു. ഫിലിപ്പ് സാറിന് നന്ദി!

ഫിലിപ്പ് August 3, 2010 at 6:49 AM  

നിധിന്‍ സാര്‍,

നന്നായിട്ടുണ്ട്. വാര്‍ത്തകള്‍ ശേഖരിച്ച് ഒരു ബുള്ളറ്റിന്‍ ആക്കി അത് വായിച്ച് എഡിറ്റു ചെയ്ത് പ്രദര്‍ശനയോഗ്യമാക്കുന്നത് വരെയുള്ള കാര്യങ്ങള്‍ ചെയ്യുന്നതു വഴി കുട്ടികളില്‍ ആത്മവിശ്വാസവും പലതരം കഴിവുകളും വളര്‍ത്താന്‍ ഈ സംരംഭം സഹായിക്കട്ടെ എന്ന് ആശംസിക്കുന്നു. (ഹോംസ് സാര്‍, കുട്ടികളുടെ പുരോഗതിക്കുവേണ്ടി ചെയ്യുന്ന നല്ല കാര്യമല്ലേ?) വാര്‍ത്ത വായിച്ച കുട്ടിയോടു പറയാന്‍: നന്നായിട്ടുണ്ട്, അല്‍പം ഔപചാരികത കുറച്ചാല്‍ നന്നായിരിക്കുമെന്ന് തോന്നുന്നു. പല പ്രാവശ്യം വാര്‍ത്ത വായിച്ചു കഴിയുമ്പോള്‍ തനിയെ ശരിയായിക്കൊള്ളുമായിരിക്കും.

മുരളി സാര്‍,

മുമ്പത്തെ ഒരു കമന്റില്‍ പിഡിഎഫിന്റെ ലിങ്ക് ഇട്ടിട്ടുണ്ട്.

ഹോംസ് സാര്‍,

കഴിഞ്ഞ രണ്ടു പാഠങ്ങളിലായി നാം പതുക്കെ പ്രോഗ്രാമിംഗിന്റെ ഗഹനതകളിലേക്ക് കടക്കുകയാണ്. അതുകൊണ്ട് ശ്രദ്ധിച്ച് വായിക്കുകയും (കൂടുതല്‍ പ്രധാനമായി) പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്ത് നോക്കുകയും ചെയ്താല്‍ നന്നായിരിക്കും. സംശയങ്ങള്‍ ഇവിടെ തീര്‍ക്കാമല്ലോ.

-- ഫിലിപ്പ്

ഹോംസ് August 3, 2010 at 6:50 AM  

പൈത്തണ്‍പാഠത്തിനിടയില്‍ മറ്റുവിഷയങ്ങളോ വിവാദങ്ങളോ വേണ്ടായെന്ന അര്‍ത്ഥത്തിലാണ് അങ്ങനെ പറഞ്ഞത്!
മാഞ്ഞൂര്‍ ബ്ലോഗും പ്രോഗ്രാം നോട്ടീസുമെല്ലാം കണ്ടു. നന്നായി!
ഞാന്‍ ബഹുമാനിക്കുന്ന ഒന്‍പതാമന്‍ നിധിന്‍മാഷ് തന്നെ!!

Sankaran mash August 3, 2010 at 6:52 AM  

ഇതിലും നല്ലൊരു പൈത്തണ്‍ പ്രോഗ്രാമിങ്ങ് പഠനം ഇനി മലയാളത്തിലുണ്ടാകുമോയെന്ന് സംശയമാണ്. അത്രയ്ക്ക് ലളിതവും മനോഹരവുമായ ആഖ്യാനം.

സംശയങ്ങളുണ്ടെങ്കില്‍ ചോദിക്കാം.

ShahnaNizar August 3, 2010 at 7:32 AM  

Good Lessons.
Thanks to Philip Sir

vijayan August 3, 2010 at 12:26 PM  

@ഹോംസ് ,
താങ്കളുടെ ലിസ്റ്റില്‍ പത്താം നമ്പര്‍ കിട്ടാന്‍ ഞാന്‍ എന്ത് ചെയ്യണം? താങ്കളെ ഞാന്‍ ബഹുമാനിക്കാഞ്ഞിട്ടാണോ ? ഓര്‍മയില്‍ അങ്ങിനെ സംഭവിച്ചതായി തോന്നുന്നില്ല .(നല്ല പത്താം നമ്പര്‍ ഞാന്‍ പ്രതീക്ഷിക്കുന്നു ,കിട്ടുമെന്ന് എനിക്ക് ഉറപ്പുണ്ട് )
പൈതോന്‍ പാഠങ്ങള്‍ ഗംഭീരമാവുന്നുണ്ട് . സമയം വരുമ്പോള്‍ ക്ലാസ് റൂമില്‍ നേരിട്ട് കാണിക്കാമല്ലോ.

binudigitaleye August 3, 2010 at 1:53 PM  

sir
ജനിച്ച വര്‍ഷം കണ്ടുപിടിക്കുന്നതെങ്ങനെ? രണ്ടാം പതിപ്പില്‍ age define ചെയ്തിട്ടില്ല

# This program asks for the name and age in years and months
# of the user, and outputs the year when the user was born.

name = raw_input("Hello, what is your name? ")

print name, ", please tell me your age in years and months."

years = input("How many years? ")
months = input("And how many months? ")


current_year = 2010
current_month = 8

if months < current_month :
year_of_birth = current_year - years
else :
year_of_birth = current_year - years - 1

print name, ", you were born in ", year_of_birth
print "Goodbye!"



program ഇങ്ങനെ അല്ലേ

binudigitaleye August 3, 2010 at 2:00 PM  

​വര്‍ഷവും മാസവും ഏതായാലും age കണ്ടുപിടിക്കാനുളള program
( system date & year correct ആയിരിക്കണം)




# This program asks for the name and age in years and months
# of the user, and outputs the year when the user was born.

import time
import datetime
name = raw_input("Hello, what is your name? ")

print name, ", please tell me your age in years and months."

years = input("How many years? ")
months = input("And how many months? ")

today = datetime.date.today()
current_year = today.year
current_month = today.month

if months < current_month :
year_of_birth = current_year - years
else :
year_of_birth = current_year - years - 1

print name, ", you were born in ", year_of_birth
print "Goodbye!"

ഫിലിപ്പ് August 3, 2010 at 3:26 PM  

ബിനു സാര്‍,

നന്ദി, പ്രോഗ്രാം തിരുത്തിയിട്ടുണ്ട്.

-- ഫിലിപ്പ്

binudigitaleye August 3, 2010 at 8:22 PM  

ഫിലിപ്പ് സാറിന് ഗുരുദക്ഷിണ


# coding=utf-8
for i in range(0, 1001):

print "നന്ദി ഫിലിപ്പ് സര്‍! "

binudigitaleye August 3, 2010 at 9:43 PM  

ദിമാന സമവാക്യത്തിന്റെ മൂല്യം കാണനുളള പൈത്തണ്‍ പ്രോഗ്രാം




# coding=utf-8
from math import sqrt
print " ദിമാന സമവാക്യത്തിന്റെ മൂല്യം കാണനുളള പൈത്തണ്‍ പ്രോഗ്രാം"
print " ax^2+bx+c=0 a!=0"
a = input("a യുടെ വില ? ")
b = input("b യുടെ വില ? ")
c = input("c യുടെ വില ? ")
d=b*b-4*a*c
if d < 0 :
print " x ന്റെ വിലകള്‍ രേഖീയ സംഖ്യകള്‍ അല്ല"
else :
if d == 0 :
print " x ന്റെ വിലകള്‍ തുല്ലമാണ് "
print " x ന്റെ വില" , -b/(2*a)
else :
print " x ന്റെ ഒന്നാം വില" , (-b+sqrt(d))/(2*a)
print " x ന്റെ രണ്ടാം വില" , (-b-sqrt(d))/(2*a)



പ്രോഗ്രാമില്‍ തെറ്റുകള്‍ ഉണ്ടെങ്കില്‍ ക്ഷമിക്കുക

സഹൃദയന്‍ August 4, 2010 at 10:55 PM  

I don't have that problem with that DVD..
But the problem is that almost all the softwares given in it is available in net or they are already available or are stale
Some softwares are not working
Most of them are outdated
It is not a complete in the sense that most of the copies of text books and also source books are not included in it.
It is auto running in windows but not in Ubuntu
Help files are not satisfactory
Most of the content is taken directly from internet
And now I remember...
I think there is some basic problem in the DVD that when it is put in my system the Whole desktop is disappearing ,, This is happening not for once but for several times....

Venu.G.potti.kilimanoor August 5, 2010 at 8:09 PM  

സര്‍
ICT Scheme ല്‍ കിട്ടിയ HP Printer/scaner f2483
എങ്ങനെയാണ് Scan ചെയ്യുന്നത്.Ubuntu വ്ല്‍ Xsane ഉപയോഗിച്ചപ്പോള്‍ No devices available എന്നുവന്നു.
Linux 3.2 വില്‍ Linux installation software for 3.2 Install ചെയ്യാന്‍ സാധിക്കുന്നില്ല.

വേണു ജി.പോറ്റി
Sitc
RRVGHSS,Kilimanoor

ഫിലിപ്പ് August 7, 2010 at 1:36 AM  

ഗീത ടീച്ചര്‍, ശങ്കരന്‍ മാഷ്, ഷഹന ടീച്ചര്‍, വിജയന്‍ സാര്‍,

നന്ദി.

ബിനു സാര്‍,

നന്ദി, പ്രോഗ്രാം പാഠത്തിലേക്ക് എടുത്തെഴുതിയിട്ടുണ്ട്. പൈത്തണിന്റെ ഔട്പുട്ടില്‍ കൂട്ടക്ഷരങ്ങളും മറ്റും അത്ര ഭംഗിയില്ലാതെ വരുന്നതുകൊണ്ട് പ്രോഗ്രാം ഇംഗ്ളീഷിലാക്കി.

-- ഫിലിപ്പ്

binudigitaleye August 7, 2010 at 9:14 PM  

@ഫിലിപ്പ് സാര്‍


മിശ്ര സംഖ്യകള്‍ (complex numbers) ദിമാന സമവാക്യത്തിന്റെ മൂല്യം കാണനുളള പൈത്തണ്‍ പ്രോഗ്രാം

# This program finds the roots of a quadratic equation using
# the famous quadratic formula. It takes as input the
# coefficients a, b, and c of the equation ax^2 + bx + c = 0

print " A program that finds the roots of the quadratic \
equation"
print " ax^2+bx+c=0 where a is not 0"
a = input("a = ")
b = input("b = ")
c = input("c = ")

# Find the value of the discriminant.
d = b**2 - 4*a*c

if d < 0 :
d = -d
sqrt_d = d ** (1.0/2)
root1r = (-b) / (2 * a)
root1i = sqrt_d/ (2 * a)
print " One root of the equation is: " , \
root1r,"+",root1i,"i"
print " The other root is: " , root1r,"-",root1i,"i"
else :
if d == 0 :
print " The two roots of the equation coincide."
print " The single value of the roots is: " , \
-b/(2*a)
else :
# Find the square root of d (how?)
sqrt_d = d ** (1.0/2)
print " One root of the equation is: " , \
(-b + sqrt_d)/(2*a)
print " The other root is: " , (-b - sqrt_d)/(2*a)






സാര്‍ മാത്സ് പഠിക്കാന്‍ അവസരം കിട്ടിയിടും നല്ല രീതിയില്‍ പഠിച്ചിട്ടില്ല (പഠിച്ചില്ല). ഈ പ്രോഗ്രാമില്‍ തെറ്റുണ്ടെങ്കില്‍ തീരുത്തി തരുമല്ലോ?

binudigitaleye August 7, 2010 at 9:47 PM  
This comment has been removed by the author.
ഫിലിപ്പ് August 13, 2010 at 6:13 AM  

ബിനു സാര്‍,

താങ്കളുടെ ഉത്തരം ശരിയാണ്.

സ്പേസുകളൊക്കെ ശരിയാകുന്ന രീതിയില്‍ ഇത് ഇവിടെ കാണാം. അവിടെ പ്രോഗ്രാമിന് താഴെ കാണുന്ന Upload with new input എന്നതില്‍ അമര്‍ത്തിയാല്‍ ഈ പ്രോഗ്രാമിന് പുതിയ ഇന്‍പുട്ടുകള്‍ കൊടുത്ത പ്രവര്‍ത്തിപ്പിച്ചുനോക്കാം. ടെര്‍മിനല്‍ അല്ലാത്തതുകൊണ്ട് പ്രോഗ്രാമിനു വേണ്ടതായ ഇന്‍പുട്ടുകളൊക്കെ ഒന്നിച്ച് — പ്രോഗ്രാമിന്റെ ഓരോ ചോദ്യത്തിനുമുള്ള ഉത്തരം ഓരോ വരിയിലായി — കൊടുക്കണം. ഒന്നു രണ്ടു ഉദാഹരണങ്ങള്‍ കൊടുത്തത് അവിടെ കാണാം.

ബിനു സാറല്ലാതെ മറ്റുള്ളവരാരും പ്രവര്‍ത്തനങ്ങള്‍ ഒന്നും ചെയ്തതായി പറയുന്നില്ലല്ലോ. ചെയ്തുനോക്കാഞ്ഞിട്ടോ അതോ ചെയ്തുനോക്കി ശരിയാകാഞ്ഞിട്ടോ? കഴിഞ്ഞ രണ്ടു പാഠങ്ങളിലായി അവതരിപ്പിച്ച ചരങ്ങള്‍, if എന്നിവ ശരിയായി മനസ്സിലാക്കിയില്ലെങ്കില്‍ ഇനിയുള്ള കാര്യങ്ങള്‍ പഠിക്കാന്‍ ബുദ്ധിമുട്ടാകും. ഇവ പഠിക്കാനുള്ള ഏറ്റവും എളുപ്പ വഴി പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുക എന്നതാണ്: നീന്തലും സൈക്കിള്‍ചവിട്ടും പോലെ പ്രോഗ്രാമിംഗും വായിച്ചുപഠിക്കാനുള്ളതല്ല, ചെയ്തുനോക്കി പഠിക്കാനുള്ളതാണ്. അതുകൊണ്ട് പൈത്തണ്‍ പുതുതായി പഠിക്കുന്നവരെങ്കിലും പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്തുനോക്കുകയും അത് ശരി ആയാലും തെറ്റ് ആയാലും ഇവിടെ പറയുകയും വേണം.


ഗണിതശാസ്ത്രത്തിന്റെ അറിയപ്പെടുന്ന ആദ്യകാലങ്ങള്‍ തൊട്ടുതന്നെ അതിപ്രധാനവും പ്രശസ്തവുമായ ഒരു ആശയത്തെ സംബന്ധിച്ച ഒന്നുരണ്ട് ചോദ്യങ്ങള്‍ക്ക് കംപ്യൂട്ടര്‍ ഉപയോഗിച്ച് എങ്ങനെ ഉത്തരം കണ്ടുപിടിക്കാം എന്ന കാര്യമാണ് അടുത്ത പാഠത്തില്‍ ഉള്‍പ്പെടുത്താന്‍ ഉദ്ദേശിക്കുന്നത്. ഈ ചോദ്യങ്ങള്‍ക്ക് കടലാസും പേനയും ഉപയോഗിച്ച് ഉത്തരം കാണുക എന്നത് ആശയപരമായി ലളിതമാണെങ്കിലും പ്രവര്‍ത്തിയില്‍ അറുബോറാണ്; അതുകൊണ്ടുതന്നെ കൈകൊണ്ട് ചെയ്യുമ്പോള്‍ തെറ്റു വരുത്താനുള്ള സാധ്യത ഏറെയും. ഒരു മനുഷ്യന്‍ ഒരു വര്‍ഷമെടുത്താലും ചെയ്തുതീരാത്ത ഒരു കാര്യം കംപ്യൂട്ടറിനെക്കൊണ്ട് സെക്കന്റുകള്‍ക്കകം ചെയ്യിക്കുന്നതിന്റെ ഒരു ഉദാഹരണവും നാം ഇതിലൂടെ ആദ്യമായി കാണും. മുമ്പത്തെ പാഠങ്ങള്‍ ശരിക്ക് മനസ്സിലായെങ്കില്‍ ഈ പുതിയ കാര്യങ്ങള്‍ വളരെ എളുപ്പം മനസ്സിലാകും; ഇല്ലെങ്കിലോ, ബാലികേറാമലയായി തോന്നുകയും ചെയ്യും. അതുകൊണ്ടു തന്നെ ഇതുവരെ തന്ന പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുകയും ഉത്തരങ്ങള്‍ — ഉത്തരം തെറ്റിപ്പോകുന്നത് കുറ്റമല്ല, കുറവുമല്ല — ഇവിടെ പറയുകയും ചെയ്യുക.

-- ഫിലിപ്പ്

ഹോംസ് August 13, 2010 at 7:33 AM  

നാലാം പാഠം മുതല്‍ അല്പം ഉഴപ്പി...
ശരിയാക്കിയെടുത്തോളാം!

Sreenilayam August 19, 2010 at 8:07 AM  

അടുത്ത പാഠം ഇനി എന്നാണ്...?
വെക്കേഷന്‍ കഴിഞ്ഞിട്ടാണോ?

ഫിലിപ്പ് August 19, 2010 at 9:37 AM  

മന്‍മോഹന്‍ സാര്‍,

അടുത്ത പാഠം തയ്യാറായി വരുന്നുണ്ട്. ഒന്നുരണ്ടു ദിവസങ്ങള്‍ക്കകം ശരിയാകേണ്ടതാണ്. യാത്രയിലായതുകൊണ്ട് ഇന്റര്‍നെറ്റ് സൗകര്യം കുറവാണ്.

കഴിഞ്ഞ പാഠത്തിലെ പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്തുനോക്കിയോ?

-- ഫിലിപ്പ്

fasal August 22, 2010 at 7:25 PM  

ഞാന്‍ ഒരു പൈത്തണ്‍ പ്രോഗ്രാം 3.8 ലിനക്സില്‍ (ഡെബിയന്‍ 5) തുറക്കാന്‍ ശ്രമിക്കുമ്പോഴെല്ലാം (Python വേര്‍ഷന്‍ 2.5.2) Blue fish ആണ് തുറന്നു വരുന്നത്. പെര്‍മിഷനെല്ലാം കൊടുത്തിട്ടുണ്ട്. എന്തായിരിക്കും കാരണം?

ഫിലിപ്പ് August 22, 2010 at 9:13 PM  

ഫസല്‍ സാര്‍,

ഏതെങ്കിലുമൊരു പൈത്തണ്‍ ഫയലില്‍ റൈറ്റ്-ക്ളിക്ക് ചെയ്ത് "Properties" എന്നതെടുത്ത് "Open with" എന്നുള്ളത് താങ്കള്‍ക്കു വേണ്ട പ്രോഗ്രാം ആക്കിയാല്‍ മതി.

-- ഫിലിപ്പ്

bhama August 25, 2010 at 10:38 AM  

പൈതണ്‍ പാഠങ്ങള്‍ പ്രസിദ്ധീകരിച്ച സമയത്ത് അത് ശരിയായി പഠിക്കാനുള്ള സമയം കിട്ടിയിരുന്നില്ല. കഴിഞ്ഞ രണ്ടു ദിവസമായി പൈതണ്‍ പഠനത്തിലായിരുന്നു.
മൂന്നു സംഖ്യകള്‍ നല്കിയാല്‍ തന്നിരിക്കുന്നതില്‍വെച്ച് ഏറ്റവും വലിയ സംഖ്യ ഔട്ട്പുട്ട് നല്കുന്നതിനുള്ള പ്രോഗ്രാം


number_1=input (“Enter the first number”)
number_2=input (“Enter the second number”)
number_3=input (Enter the third number”)
if number_1>number_2 and number_1>number_3 :
print “The biggest number is “, number_1
else :
if number_2>number_3 :
print “ The biggest number is “, number_2

else :
print “The biggest number is “, number_3

ഫിലിപ്പ് August 25, 2010 at 11:42 AM  

ഭാമ ടീച്ചര്‍,

നന്നായിട്ടുണ്ട്. പ്രോഗ്രാമിന്റെ മൂന്നാമത്തെ വരിയ്ക്ക് എന്തെങ്കിലും കുഴപ്പമുണ്ടോ?

പൈത്തണ്‍ ഭംഗിയായി കാണാന്‍ --- സ്പേസ് ശരിയായി വരാന്‍ --- ഈ സൈറ്റ് ഉപയോഗിച്ചുനോക്കാമോ? അവിടെ ഇടതുവശത്ത് പൈത്തണ്‍ എന്നത് തിരഞ്ഞെടുക്കുക. എന്നിട്ട് "paste your source code" എന്ന് കാണുന്ന വലിയ പെട്ടിയില്‍ കോഡ് എഴുതുക. ഇടതുവശത്തുള്ള രണ്ട് ചെറിയ പെട്ടികളിലെയും ശരിചിഹ്നം എടുത്തുകളയുക. "submit" എന്ന ബട്ടണ്‍ അമര്‍ത്തുക. പിന്നെ കിട്ടുന്ന പേജില്‍നിന്ന് ലിങ്ക് ഇവിടെ തന്നാല്‍ മതി.

ടീച്ചറുടെ പ്രോഗ്രാം ചെറിയ മാറ്റങ്ങളോടെ അവിടെ എഴുതിയതിന്റെ ലിങ്ക് ഇതാ.

-- ഫിലിപ്പ്

bhama August 25, 2010 at 1:19 PM  

yes sir. " ഇത് വിട്ടുപോയി.
typing error.
program എഴുതി run ചെയ്തു നോക്കിയിട്ടാണ് കമന്റ് ചെയ്തത്. വീണ്ടും ടൈപ്പ് ചെയ്തപ്പോള് വന്ന തെറ്റ്.

നാലാമത്തെ പാഠത്തില്‍ പറഞ്ഞിട്ടുള്ള a,b എന്നീ ചരങ്ങളുടെ മൂല്യം പരസ്പരം മാറ്റുന്നതിനുള്ള program സ്ട്രിംഗ് ഉപയോഗിക്കാതെ എഴുതിയതാണ് ഇവിടെ

ഫിലിപ്പ് August 25, 2010 at 1:53 PM  

ഭാമ ടീച്ചര്‍,

ആശയം കൊള്ളാം. നാലാമത്തെ പാഠത്തിലെ പ്രവര്‍ത്തനത്തില്‍ കൊടുത്തിട്ടുള്ള ഇന്‍പുട്ട് ഈ പ്രോഗ്രാമിന് കൊടുത്തുനോക്കിയോ?

-- ഫിലിപ്പ്

bhama August 25, 2010 at 11:00 PM  

നാലാമത്തെ പാഠത്തിലെ പ്രവര്‍ത്തനത്തില്‍ കൊടുത്തിട്ടുള്ള ഇന്‍പുട്ട് ഇപ്പോഴാണ് നോക്കിയത്. ഇന്‍പുട്ടായി ക്യാരക്ടറാണ് നല്കിയിരിക്കുന്നത്. സംഖ്യകളാണെങ്കില് മാത്രമേ ഞാനെഴുതിയ പ്രോഗ്രാം ശരിയാവുകയുള്ളു.

bhama August 26, 2010 at 6:23 AM  

ഇങ്ങനെ യാണെങ്കില് ശരിയാവുകയില്ലേ

ഫിലിപ്പ് August 26, 2010 at 8:37 AM  

ഭാമ ടീച്ചര്‍,

ഇത് ശരിയാകും. രണ്ടു ചരങ്ങളുടെ മൂല്യങ്ങള്‍ തിരിച്ചുമറിച്ചിടാന്‍ പ്രോഗ്രാമിംഗ് ഭാഷകളില്‍ സര്‍വത്ര ഉപയോഗിക്കുന്ന പ്രയോഗവും (idiom) ഇതുതന്നെ.

-- ഫിലിപ്പ്

KIRANAM August 26, 2010 at 9:25 AM  

ഫിലിപ്പ് സാര്‍ ചോദിച്ച പഠന പ്രവര്‍ത്തനങ്ങളില്‍ മാര്‍ക്ക്‌ നല്‍കിയാല്‍ ഗ്രേഡ് ആക്കി മാറ്റുന്ന പ്രോഗ്രാം ഞാന്‍ ചെയ്തു നോക്കിയത് ഇതാ ഇങ്ങിനെ യാണ് .

mark=input("Enter the mark of a subject (out of 100): ")
if mark>100:
    print "Incorrect Mark \n Please try again"
elif mark>=90:
    grade="A+"
elif mark>=80:
    grade="A"
elif mark>=70:
    grade="B+"
elif mark>=60:
    grade="B"
elif mark>=50:
    grade="C+"
elif mark>=40:
    grade="C"
elif mark>=30:
    grade="D+"
else:
    grade="Failed"
print "Your grade is : ",grade


തെറ്റുകള്‍ തിരുത്തി തരുമല്ലോ

KIRANAM August 26, 2010 at 9:28 AM  

പ്രവര്‍ത്തനങ്ങള്‍ പതിനൊന്നും പന്ത്രണ്ടും ഒന്ന് വിശദീകരിക്കുമോ

KIRANAM August 26, 2010 at 10:24 AM  

ഇങ്ങിനെ യാണോ പ്രര്‍ത്തനം 11

ഫിലിപ്പ് August 26, 2010 at 11:21 AM  

കിരണം സാര്‍,

ഗ്രേഡിന്റെ പ്രോഗ്രാം ശരിയാണ്. നാം പരിചയപ്പെടുത്തിയിട്ടില്ലാത്ത "elif" ഉപയോഗിക്കാതെയായിരുന്നെങ്കില്‍ കൂടുതല്‍ നന്നായേനേ. അതല്ലെങ്കില്‍ ആ കമന്റില്‍ത്തന്നെ "elif" എന്താണെന്നുള്ള, എളുപ്പം മനസ്സിലാകുന്ന ഒരു വിശദീകരണം കൂടി ഉണ്ടെങ്കിലും വായനക്കാര്‍ക്ക് പ്രോഗ്രാം വായിച്ചു മനസ്സിലാക്കാന്‍ കഴിയും.

ഡേറ്റിന്റെ പ്രോഗ്രാം ഞാന്‍ ശ്രദ്ധിച്ച് വായിച്ചില്ല, ശരിയാണെന്നാണ് ഒറ്റനോട്ടത്തില്‍ തോന്നുന്നത്. പക്ഷേ അതിലും ഇവിടെ വരുന്ന മിക്കവര്‍ക്കും അറിയാത്ത കാര്യങ്ങള്‍ ഉപയോഗിച്ചിട്ടില്ലേ? അപ്പോള്‍ അങ്ങനെയുള്ളവര്‍ക്ക് അത് പൊതിയാത്തേങ്ങയാകുമല്ലോ. നാം പരിചയപ്പെടുത്തിയിട്ടുള്ള, പാഠങ്ങളൊക്കെ വായിച്ച് മനസ്സിലാക്കിയ ഒരാള്‍ക്ക് വായിക്കാവുന്ന രീതിയിലുള്ള ഉത്തരമാവില്ലേ കൂടുതല്‍ പ്രയോജനപ്രദം? അത്തരമൊരു ഉത്തരം അല്പം നീണ്ടുപോയാലും?


അറിയാത്തവരെ ഞെട്ടിക്കുക എന്നതല്ലല്ലോ നമ്മുടെ ഉദ്ദേശം.

-- ഫിലിപ്പ്

KIRANAM August 26, 2010 at 1:57 PM  
This comment has been removed by the author.
KIRANAM August 26, 2010 at 1:58 PM  

@ഫിലിപ്പ് സാര്‍
ക്ഷമിക്കണം സാര്‍.elif ന്റെ കാര്യം ഞാന്‍ ശ്രദിചിരുന്നില്ല .സാറ് വിശദീകരിചെന്നാണ് കരുതിയത് . ഡേറ്റ് പ്രോഗ്രാം എഴുതി എഴുതി വലിയ ഒരു പ്രോഗ്രാം ആയി. സാര്‍ ഉദ്ദേശിച്ച പ്രോഗ്രാം ഇതാണോ എന്ന് ഉറപ്പില്ലത്തത് കൊണ്ടാണ് വിശദീകരണം നല്‍കാതിരുന്നത് .മാത്രവുമല്ല ഞാന്‍ പോസ്റ്റ്‌ ചെയ്ത ശേഷമാണ് ഇന്‍പുട്ട് ഫോര്‍മാറ്റ് വിത്യാസം കണ്ടത്.
താങ്കളുടെ തുടര്‍ന്നുള്ള ക്ലാസ്സുകളെ എന്‍റെ വിശദീകരണം ബാധിക്കുമോ എന്നുള്ള സംശയവും ഉണ്ട്.
ഇവിടെ പൈതോന്‍ പഠിക്കുന്ന കൂടുതല്‍ ആളുകളും മുന്‍പ് ബേസിക് പ്രോഗ്രാം കുട്ടികളെ പടിപ്പിച്ചവരോ പഠിച്ചവരോ ആയിരിക്കും.അതുകൊണ്ട് തന്നെ ആ നിലവാരത്തില്‍ ഉള്ള ഒരു പ്രോഗ്രാം ആയി ഇതിനെ ഞാന്‍ ഇവിടെ കൊടുത്തത്.
സാറ് പൊതിക്കാന്‍ വെച്ച തേങ്ങ ഞാന്‍ പൊതിച്ചാല്‍ അത്ര കൃത്യത ഉണ്ടാവില്ല

സ്നേഹത്തോടെ കിരണം

KIRANAM August 26, 2010 at 2:09 PM  

മാര്‍ക്ക്‌ ഗ്രേഡ് പ്രോബ്ലം ഇതാ ഇങ്ങിനെ ചെയ്യാം

സഹൃദയന്‍ August 26, 2010 at 2:23 PM  

പൈത്തണ്‍ ക്ലാസിലെ വൈകി വന്ന കുട്ടിയാ ഞാന്‍..
ഇപ്പോ ഒന്നാം പാഠം പഠിച്ചു തുടങ്ങിയതേയുള്ളു..
ഈ Terminal -ലെ കമാന്റുകള്‍ ഒന്നു പറയാമോ..?
അതായത് എനിക്ക് ടേര്‍മിനലില്‍ പോകാന്‍ Applications>Accessories>Terminal
ഈ മാര്‍ഗമേ അറിയൂ..
ഫോള്‍ഡറില്‍ Right Click അടിച്ചു പോകാനോ, ഡെസ്‌ക് ടോപ്പില്‍ നിന്നും right click അടിച്ചു പോകാനോ സാധിക്കുന്നില്ല.
അപ്പോ ചോദ്യം ഇതാണ്
എങ്ങിനെയെങ്കിലും ഞാന്‍ ടേര്‍മിനലില്‍ എത്തി എന്നു വയ്‌ക്കുക.
എനിക്ക് /home/chikku/MyPython -ല്‍ എത്തണം.
എങ്ങിനെ അവിടെയെത്തും..

KIRANAM August 26, 2010 at 2:43 PM  
This comment has been removed by the author.
സഹൃദയന്‍ August 26, 2010 at 3:06 PM  

രണ്ടാം പാഠം എത്തി കേട്ടോ..
എനിക്ക് മലയാളം ഇന്‍സ്‌ക്രിപ്റ്റ് ടൈപ്പിംഗ് അറിയില്ല..
അതു കൊണ്ട് മലയാളം ഏരിയയില്‍ നോക്കുന്നില്ല.

ഷെല്‍ നോക്കി, കൂട്ടീം കുറച്ചും,ഗുണിച്ചും ഹരിച്ചും എല്ലാം നോക്കി..
വിജയമായിരുന്നു..
IDLE സ്‌കൂള്‍ ഉബുണ്ടു 10.04 -ല്‍ ഉണ്ടെന്നു തോന്നുന്നു.
കാരണം Applications>Programming -ല്‍ IDLE (Using Python 2.6)
എന്നുണ്ട്. ആ സ്ഥിതിക്ക് അത് ഇന്‍സ്റ്റാള്‍ ചെയ്യുന്നില്ല.

bhama August 26, 2010 at 4:46 PM  

മാര്‍ക്ക് ഗ്രേഡ് പ്രോബ്ളം ഞാന്‍ ചെയ്തത് ഇങ്ങനെ

സഹൃദയന്‍ August 26, 2010 at 7:23 PM  

ദേ .. എന്റെ പ്രോഗ്രം..
(മുന്‍പ് ആരെങ്കിലും ചെയ്‌തിട്ടുണ്ടെങ്കില്‍ ഞാന്‍ ഉത്തരവാദിയല്ല..ഇത് ഞാന്‍ തനിയെ ഉണ്ടാക്കിയതാ..)

ങ്ങും...
പഠിച്ചു വരുന്നു അല്ലേ ... ?
He got _ marks in English
എന്ന് ഒറ്റ വരിയില്‍ വരുത്താനെന്താ മാര്‍ഗം..?
(IDLE കിട്ടിയതോടെ ഞാന്‍ Terminal നെ വിട്ടു...)

ഫിലിപ്പ് August 26, 2010 at 7:30 PM  

കിരണം സാര്‍,

തുടര്‍ന്നുള്ള ക്ളാസുകളെ വിശദീകരണം ബാധിക്കുമോ എന്ന് വിചാരിച്ച് വിശദീകരിക്കാതിരിക്കേണ്ട. ഒരേ കാര്യം പല പ്രാവശ്യം പല രീതിയില്‍ കാണുന്നതുകൊണ്ട് ഗുണമല്ലാതെ ദോഷമുണ്ടാകാന്‍ സാധ്യതയില്ലല്ലോ.

ചിക്കു സാര്‍,

ഫോള്‍ഡറില്‍ റൈറ്റ്-ക്ളിക്ക് ചെയ്ത് ടെര്‍മിനല്‍ തുറക്കാന്‍ ഉബുണ്ടുവില്‍ nautilus-open-terminal എന്ന പാക്കേജ് ഇന്‍സ്റ്റാള്‍ ചെയ്യണം. ഇത് ടെര്‍മിനലില്‍ നിന്ന് ചെയ്യാനുള്ള വഴി sudo apt-get install nautilus-open-terminal എന്ന കമാന്റ് കൊടുക്കുക എന്നതാണ്.

ടെര്‍മിനലില്‍ എവിടെനിന്നായാലും നമ്മുടെ ഹോം ഡയറക്ടറിയിലേക്ക് പോകാന്‍ cd എന്ന കമാന്റ് കൊടുത്താല്‍ മതി. ഒന്നാം പാഠത്തില്‍ ഇത് വിശദീകരിച്ചിരിക്കുന്നത് നോക്കുമല്ലോ.

ഭാമ ടീച്ചര്‍,

പ്രോഗ്രാം ശരിയാണ്. ഒന്നുരണ്ട് ചെറിയ കാര്യങ്ങള്‍ :

1. പ്രോഗ്രാം വേണമെങ്കില്‍ ഒരല്‍പ്പം ചെറുതാക്കാം : ഉദാഹരണത്തിന്, if mark >= 90 എന്നതിന്റെ else-ന്റെ പരിധിയില്‍ വരുമ്പോഴേക്കും mark എന്നതിന്റെ വില 90-ല്‍ നിശ്ചയമായും കുറവായിരിക്കില്ലേ? (എന്തുകൊണ്ട്?) അപ്പോള്‍ അവിടെ if mark >= 80 and mark < 90 എന്നതിലെ രണ്ടാമത്തെ ചോദ്യത്തിന്റെ (mark < 90 ?) ഉത്തരം എപ്പോഴും True എന്നതായിരിക്കും. അതുകൊണ്ട് ഈ രണ്ടാമത്തെ ചോദ്യം വേണമെങ്കില്‍ ഒഴിവാക്കാം. അതായത് ഇവിടെ if mark >= 80 എന്ന് മാത്രമാണെങ്കിലും പ്രോഗ്രാം ശരിയായി പ്രവര്‍ത്തിക്കും. ഇതേപോലെ മറ്റിടങ്ങളിലും.

2. സംകാരകങ്ങള്‍ എഴുതുമ്പോള്‍ അല്പം ഇട വിട്ട് എഴുതിയാല്‍ കൂടുതല്‍ ഭംഗിയായിരിക്കുമെന്ന് തോന്നുന്നു. ഉദാഹരണത്തിന് if mark>=80 എന്നതിന് പകരം if mark >= 80.

ഇതു രണ്ടും വെറും "സൌന്ദര്യവര്‍ധകങ്ങള്‍" ആണ്: പ്രോഗ്രാം ടീച്ചര്‍ എഴുതിയ രൂപത്തില്‍ തികച്ചും ശരിയാണ്. കിരണം സാര്‍ ഇതേ പ്രവര്‍ത്തനത്തിനായി എഴുതിയ പ്രോഗ്രാം കൂടി ഒന്ന് നോക്കുക.

-- ഫിലിപ്പ്

ഫിലിപ്പ് August 26, 2010 at 7:33 PM  

ചിക്കു സാര്‍,

print "He got ", a, " marks in English"

എന്ന് പറഞ്ഞാല്‍ മതി. ഇങ്ങനെ കോമയിട്ട് എത്രവേണമെങ്കിലും എഴുതാം.

-- ഫിലിപ്പ്

bhama August 26, 2010 at 8:37 PM  

പ്രവര്‍ത്തനം 11 ഇങ്ങനെ ആണോ ?

ഫിലിപ്പ് August 26, 2010 at 10:22 PM  

ഭാമ ടീച്ചര്‍,

പ്രവര്‍ത്തനം 11-ല്‍ ഈ വര്‍ഷത്തെ ഒരു ദിവസമാണല്ലോ ഇന്‍പുട്ട് ആയി കൊടുക്കുന്നത്? ടീച്ചറുടെ പ്രോഗ്രാമിന് ഈ വര്‍ഷം ഫെബ്രുവരി 28 എന്ന തീയതി ഇന്‍പുട്ട് ആയി കൊടുത്താല്‍ എന്താണ് ഉത്തരം കിട്ടുന്നത്?

ഇത് ശരിയാക്കിയാല്‍പ്പിന്നെ ഈ പ്രോഗ്രാം തന്നെ കുറച്ചു മാറ്റി 12-ആം പ്രവര്‍ത്തനത്തിന്റെയും ഉത്തരം ആക്കാം. ശ്രമിച്ചുനോക്കൂ.

ടീച്ചര്‍ക്ക് പ്രോഗ്രാമിംഗ് ആശയങ്ങള്‍ നന്നായി മനസ്സിലാകുന്നുണ്ട്.

-- ഫിലിപ്പ്

KIRANAM August 26, 2010 at 11:27 PM  

@ഫിലിപ്പ് സാര്‍

ഭാമ ടീച്ചര്‍ ഇത് വരെ പഠിച്ച ഭാഗങ്ങള്‍ വച്ച് തന്നെ ഡേറ്റ് പ്രോഗ്രാം എഴുതിയല്ലോ.
ഇനി ധൈര്യമായി തന്നെ വിശദീകരിക്കാം ,തെറ്റിയാലും താങ്കളുടെ പിന്തുണ ഉണ്ടാകുമല്ലോ

@ഭാമ ടീച്ചര്‍
നിങ്ങളുടെ പ്രോഗ്രാം വളരെ സിമ്പിള്‍ ആയി ഉത്തരം കണ്ടെത്തുന്നുണ്ട്.ഫിലിപ്പ് സാര്‍ പറഞ്ഞ പ്രോബ്ലം ഇതില്‍ കാണുന്നുണ്ട് .കൂടാതെ ഇത് ഇതു വര്‍ഷത്തിനും കൂടി തയ്യാറാക്കുമ്പോള്‍ ലീപ് ഇയര്‍ ആയ ഒരു വര്‍ഷത്തിലെ ഫെബ്രുവരി 28 ഇന്പുട്ട് കൊടുത്തു നോക്കിയാല്‍ എന്താണ് ഈ പ്രോഗ്രാം ഉത്തരം നല്‍കുന്നത്.
ചെറിയ ഒരു കീടം ഒളിഞ്ഞിരിപ്പുണ്ടോ??

bhama August 27, 2010 at 9:25 AM  

@ Philip Sir,

ഇങ്ങനെ ആയാല്‍ ശരിയായില്ലേ ?

bhama August 27, 2010 at 9:10 PM  

പ്രവ. 12.

* ഇന്‍പുട്ട്: ഒരു ദിവസം — വര്‍ഷം, മാസം, തീയതി എന്ന രീതിയില്‍.
* ഔട്പുട്ട്: തന്നിരിക്കുന്ന ദിവസത്തിന്റെ അടുത്ത ദിവസം — വര്‍ഷം, മാസം, തീയതി എന്ന രീതിയില്‍.
ഇതിനുള്ള
പ്രോഗ്രാം

ഇതു ശരിയായോ ?

KIRANAM August 28, 2010 at 5:23 AM  

ഭാമ ടീച്ചര്‍

താങ്കള്‍ നല്‍കിയ പ്രോഗ്രാം നമുക്ക് ഇങ്ങിനെ മാറി എഴുതിക്കൂടെ

KIRANAM August 28, 2010 at 5:34 AM  

നാം ഒരു വര്ഷം ഇന്‍പുട്ട് നല്‍കിയാല്‍ പ്രസ്തുത കൊല്ലം ലീപ് ഇയര്‍ ആണോ അല്ലെ എന്ന് എങ്ങിനെ കാണാന്‍ സാധിക്കും (ഉത്തരം ഭാമ ടീച്ചറുടെ പ്രോഗ്രാമില്‍ ഉണ്ട് )
മറ്റൊരു പ്രവര്‍ത്തനം : ഇന്‍പുട്ട് ആയി ഒരു മാസത്തിന്റെ നമ്പര്‍ (1 മുതല്‍ 12 വരെ ) നല്‍കിയാല്‍ ഇതാണ് മാസം എന്ന് പ്രിന്‍റ് ചെയ്തുവരാന്‍ എങ്ങിനെ പ്രോഗ്രാം എഴുത്തും ??.

ദിവസങ്ങളുടെ എണ്ണം നല്‍കിയാല്‍ അതിനെ എത്ര വര്‍ഷം എത്ര ആഴ്ച എത്ര ദിവസം എന്ന് പിരിച്ചെഴുതാന്‍ പറ്റുമോ ?? ഉദാഹരണം 375 ദിവസം എന്നാല്‍ ഒരു വര്‍ഷം ഒരാഴ്ച മൂന്നു ദിവസം എന്നിങ്ങിനെ.

ഫിലിപ്പ് August 28, 2010 at 9:09 AM  

ഭാമ ടീച്ചര്‍,

(ഇപ്പോഴത്തെ) പ്രവര്‍ത്തനം 14-ല്‍ ഈ വര്‍ഷത്തെ ഒരു ദിവസമാണല്ലോ ഇന്‍പുട്ട് ആയി കൊടുക്കുന്നത്? ഇതിന് ടീച്ചറുടെ പുതുക്കിയ പ്രോഗ്രാം ശരിയായ ഉത്തരം തരും.

പ്രോഗ്രാമില്‍ പക്ഷേ അധിവര്‍ഷത്തിലെ തീയതികളെയും പരിഗണിക്കുന്നവിധത്തിലുള്ള കോഡ് കാണുന്നു (28 മുതല്‍ 33 വരെയുള്ള വരികളില്‍). ഈ പ്രോഗ്രാം പ്രവര്‍ത്തനം 15-ന്റെ കൂടി ഉത്തരമായിട്ടാണോ ടീച്ചര്‍ ഉദ്ദേശിച്ചത്? അങ്ങനെയാണെങ്കില്‍ 28/2/2012 എന്ന ഇന്‍പുട്ടില്‍ ഇത് ശരിയായി പ്രവര്‍ത്തിക്കുന്നില്ല. ഇത് ശരിയാക്കാന്‍ നോക്കൂ. കിരണം സാറിന്റെ പ്രോഗ്രാം ഇതുവരെ നോക്കിയില്ലെങ്കില്‍ അത് നോക്കാതെ ഇത് ശരിയാക്കാന്‍ ശ്രമിക്കൂ. കുറച്ച് ശ്രമിച്ചിട്ടും ശരിയാകുന്നില്ലെങ്കില്‍ അദ്ദേഹത്തിന്റെ പ്രോഗ്രാം കാണുക.

1. പ്രോഗ്രാമിലെ 32,33 ഈ വരികള്‍ എപ്പോഴാണ് പ്രവര്‍ത്തിപ്പിക്കപ്പെടുക എന്ന് ആലോചിച്ചു നോക്കൂ.

2. സംഖ്യകള്‍ എഴുതുമ്പോള്‍ പൂജ്യം തുടക്കത്തില്‍ വന്നാല്‍ പൈത്തണില്‍ അതിനൊരു പ്രത്യേക അര്‍ത്ഥമുണ്ട്. സ്ഥാനവില എട്ട് ആയ (octal) സംഖ്യകള്‍ എഴുതാനാണ് ഈ രീതി ഉപയോഗിക്കുന്നത്. നാം സാധാരണ സ്ഥാനവില പത്ത് ആയ (decimal) രീതിയിലാണല്ലോ സംഖ്യകള്‍ എഴുതുന്നത്? അതുകൊണ്ട് സംഖ്യകളെഴുതുമ്പോള്‍ (octal വേണമെന്നില്ല എങ്കില്‍) പൂജ്യം തുടക്കത്തില്‍ ഇടാതെയിരിക്കുന്നതാണ് നല്ലത്: കണ്ടുപിടിക്കാന്‍ നല്ല പ്രയാസമുള്ള കീടങ്ങളെ പ്രോഗ്രാമില്‍ വരുത്താനേ ഇങ്ങനെയെഴുതുന്നത് ഉപകരിക്കൂ. ടീച്ചറുടെപ്രോഗ്രാം കണ്ടിട്ട് ഇങ്ങനെയൊരു ബുദ്ധിമുട്ട് വന്നിട്ടുണ്ടാകും എന്ന് തോന്നുന്നു.

07 എന്ന് എഴുതാമെങ്കിലും 08 എന്ന് എഴുതിയപ്പോള്‍ പൈത്തണ്‍ ബഹളം വെച്ചതിന്റെ കാരണം ഇപ്പോള്‍ മനസ്സിലായല്ലോ. 8 എന്നത് octal-ല്‍ അനുവദനീയമായ സംഖ്യ (digit) അല്ല : 0,1 എന്നിവ മാത്രമുപയോഗിച്ചാണ് binary സംഖ്യകള്‍ എഴുതുന്നത് എന്നതുപോലെ, 0,1,2,...,7 എന്നിവ മാത്രമുപയോഗിച്ചാണ് octal സംഖ്യകള്‍ എഴുതുന്നത്. അതേപോലെ 010 എന്നതിന്റെ വില എട്ടാണ്, പത്ത് അല്ല!

3. ഇത് കുറച്ചു വലിയ പ്രോഗ്രാമായതുകാരണം കോഡിനനുസരിച്ചുള്ള കമന്റുകള്‍ എഴുതുന്നത് പ്രോഗ്രാം എഴുതുന്നയാളെയും വായിക്കുന്നയാളെയും സഹായിക്കും. ഉദാഹരണത്തിന്, 27-ആമത്തെ വരി ഇങ്ങനെ ആക്കിയാല്‍ ആ ഭാഗം എഴുതാനും വായിക്കാനും കൂടുതല്‍ എളുപ്പമാകുമല്ലോ:

else : # February

ഇങ്ങനെ സംശയം തോന്നാവുന്ന മറ്റിടങ്ങളിലും.


കിരണം സാര്‍,

പുതിയ പ്രവര്‍ത്തനങ്ങള്‍ക്ക് നന്ദി. ഇവയെ പാഠത്തിന്റെ ഭാഗമാക്കിയിട്ടുണ്ട്. കുഴപ്പമില്ലെന്ന് കരുതുന്നു.


അധിവര്‍ഷം കണ്ടുപിടിക്കാന്‍ ടീച്ചര്‍ ഉപയോഗിച്ച ലോജിക്കില്‍ ചെറിയ വ്യത്യാസം വേണം. കൃത്യമായ ലോജിക് ഇവിടെയുണ്ട് . പൈത്തണിലേക്ക് വെറുതെ പെറുക്കിയെടുത്ത് എഴുതാവുന്നതുപോലെയാണ് അവിടെ കൊടുത്തിരിക്കുന്നത് : പൈത്തണ്‍ പഠിച്ചതിന്റെ ഗുണം കണ്ടോ?


-- ഫിലിപ്പ്

bhama August 28, 2010 at 6:22 PM  

@ ഫിലിപ്പ് സാര്‍,
1) 08,09 ഇവ കൊടുത്തപ്പോള്‍ പൈത്തണ്‍ ബഹളം വച്ചു. ആദ്യം ഞാനത് മുഴുവനായി കളഞ്ഞു നോക്കി. അപ്പോള്‍ പ്രശ്നം കണ്ടില്ല. വീണ്ടും സംഖ്യ മാത്രം ടൈപ്പ് ചെയ്തപ്പോള്‍ പ്രശ്നം കണ്ടില്ല. അത് എന്തു കൊണ്ടാണെന്നു ചോദ്ക്കാനിരിക്കുകയായിരുന്നു. അതിനു മുമ്പേ പറഞ്ഞു തന്നതിനു നന്ദി.
2) കിരണം സാറിന്റെ പ്രോഗ്രാം കാണുന്നതിനു മുമ്പു തന്നെ പ്രോഗ്രാം ശരിയാക്കിയിട്ടുണ്ടായിരുന്നു.
അധിവര്ഷത്തേയും പരിഗണിക്കുന്ന തരത്തിലാണ് അത് മാറ്റി എഴുതിയത്.
3)കോഡിനനുസരിച്ചുള്ള കമന്റുകള്‍ എഴുതാനായി ഇനിയുള്ള പ്രോഗ്രാമുകളില് ശ്രമിക്കാം.

@ Kiranam Sir,

Thank you sir.

സാറിന്റെ ചോദ്യത്തിനുള്ള പ്രോഗ്രാം എഴുതാനാകുമോ എന്നു നോക്കട്ടെ.

bhama August 28, 2010 at 8:32 PM  

@ Kiranam Sir,
ദിവസങ്ങളുടെ എണ്ണം നല്‍കിയാല്‍ അതിനെ എത്ര വര്‍ഷം എത്ര ആഴ്ച എത്ര ദിവസം എന്ന് പിരിച്ചെഴുതാന്‍ പറ്റുമോ ?? ഉദാഹരണം 375 ദിവസം എന്നാല്‍ ഒരു വര്‍ഷം ഒരാഴ്ച മൂന്നു ദിവസം എന്നിങ്ങിനെ.

ഇതിനുള്ള പ്രോഗ്രാം ഇതാ

ശരിയാകുന്നില്ലേ ?

bhama August 28, 2010 at 8:38 PM  

@ Kiranam Sir,

"ഇന്‍പുട്ട് ആയി ഒരു മാസത്തിന്റെ നമ്പര്‍ (1 മുതല്‍ 12 വരെ ) നല്‍കിയാല്‍ ഇതാണ് മാസം എന്ന് പ്രിന്‍റ് ചെയ്തുവരാന്‍ എങ്ങിനെ പ്രോഗ്രാം എഴുത്തും ?"

പ്രോഗ്രാം ഇങ്ങനെ
ശരിയാണോ ?
ഇതിലും എളുപ്പത്തില്‍ വല്ല വഴിയുമുണ്ടോ ?

KIRANAM August 28, 2010 at 11:13 PM  

@ ഭാമ ടീച്ചര്‍
ഇപ്പോള്‍ പടിച്ചരീതിയില്‍ എഴുതാന്‍ പറ്റുന്ന മികച്ച പ്രോഗ്രാം തന്നെയാണിത്.മോന്ത്‌ പ്രോഗ്രാം ഇതാ ഇങ്ങിന എഴുതാം പക്ഷെ നാം ഇത് പഠിച്ചിട്ടില്ല ഇപ്പോള്‍ ഒന്ന് പറഞ്ഞു എന്നേയുള്ളൂ.ഇത് വിശദീകരിച്ചാല്‍ ചിലപ്പോള്‍ കണ്‍ഫ്യൂഷന്‍ ആയാലോ

KIRANAM August 28, 2010 at 11:23 PM  

@ഫിലിപ്പ് സാര്‍

എന്റെ ചോദ്യങ്ങള്‍ താങ്കള്‍ പോസ്റ്റില്‍ കൊടുത്തതില്‍ ഞാന്‍ നന്ദി പറയട്ടെ.


മാത്സ് ടീച്ചര്‍ മാര്‍ക്കായി ഒരു പ്രോഗ്രാം. ത്രികോണങ്ങള്‍ വിത്യസ്ത തരത്തില്‍ ഉണ്ടെന്നു നമുക്കറിയാമല്ലോ .

ഒരു ത്രികോണത്തിന്റെ മൂന്ന് വശങ്ങള്‍ ഇന്പുട്ട് നല്‍കിയാല്‍ അതിന്റെ വിസ്തീര്‍ണവും ,അത് ഏതു വിഭാഗമാണ്‌ എന്നതും കാണുന്നതിനുള്ള പ്യ്തോന്‍ കോഡ് എഴുതാമോ ??(മൂന്നു വശങ്ങള്‍ തന്നാല്‍ അത് ഒരു ത്രികോണം ആകാനും ചില നിയമങ്ങള്‍ ഉള്ളത് ഓര്‍മിപ്പിക്കുന്നു )

KIRANAM August 28, 2010 at 11:26 PM  

പത്താം ക്ലാസ്സിലെ ഐ ടി പുസ്തകത്തില്‍ ഉള്ള ലക്കി നമ്പര്‍ പ്രോഗ്രാമും ,കരണ്ടു ബില്ലും ഇവിടെ ചെയ്തു നോക്കാമോ

ഫിലിപ്പ് August 29, 2010 at 4:26 AM  

ഭാമ ടീച്ചര്‍,

ദിവസങ്ങളെ പിരിച്ചെഴുതുന്ന പ്രോഗ്രാം ശരിയാണ്.

കിരണം സാര്‍ പറഞ്ഞതുപോലെ മാസങ്ങളുടെ പ്രോഗ്രാം നാം ഇതുവരെ പഠിച്ചത് വച്ച് ടീച്ചറെഴുതിയ രീതിയിലാണ് ഏറ്റവും നന്നായി എഴുതാന്‍ പറ്റുക. ഇതിനെ പല തരത്തില്‍ ചുരുക്കിയെഴുതാന്‍ കഴിയും. ഏറ്റവും ചുരുക്കി എഴുതുന്നത് കിരണം സാറിന്റെ ഉദാഹരണം പോലെയാണെന്ന് തോന്നുന്നു. രണ്ടിനും ഇടയ്ക്കുള്ള കുറേ രീതികള്‍ നാം വരുന്ന പാഠങ്ങളില്‍ പഠിക്കും.


-- ഫിലിപ്പ്

bhama August 29, 2010 at 7:26 PM  

Thank you Philip Sir.
അടുത്ത പാഠം എന്നാണ് സാര്‍ ?
പ്രോഗ്രാമിങ് രസകരം തന്നെ. ഏതെങ്കിലും ഒരു പ്രോഗ്രാം എഴുതാന്‍ തുടങ്ങിയാല്‍ അതു ശരിയാകുന്നതു വരെ അതിനു മുന്നില്‍ തന്നെ .


@ Kiranam Sir,

"ഒരു ത്രികോണത്തിന്റെ മൂന്ന് വശങ്ങള്‍ ഇന്പുട്ട് നല്‍കിയാല്‍ അതിന്റെ വിസ്തീര്‍ണവും ,അത് ഏതു വിഭാഗമാണ്‌ എന്നതും കാണുന്നതിനുള്ള പ്യ്തോന്‍ കോഡ് എഴുതാമോ ??"

പ്രോഗ്രാം ഇങ്ങനെ ആണോ ?

ഫിലിപ്പ് August 29, 2010 at 7:58 PM  

ഭാമ ടീച്ചര്‍,

പ്രോഗ്രാം നന്നായിട്ടുണ്ട്.

അടുത്ത പാഠം ബ്ളോഗ് ടീമിന് എഴുതി കൊടുത്തിട്ടുണ്ട്. സ്കൂള്‍ തുറക്കുന്ന ദിവസം പ്രസിദ്ധീകരിക്കാമെന്നാണ് ഹരിസാര്‍ പറഞ്ഞതെന്ന് തോന്നുന്നു.

ആറാം പാഠത്തില്‍ ഇതുവരെ കണ്ടതിനെക്കാള്‍ ശക്തവും അതുകൊണ്ടുതന്നെ പ്രയോഗിക്കാന്‍ ഇതിലേറെ രസകരവുമായ ഒരു പ്രോഗ്രാമിംഗ് സങ്കേതമാണ് പരിചയപ്പെടുത്തുന്നത്. ഇതുവരെ എഴുതിയ പ്രോഗ്രാമുകളൊക്കെ മനുഷ്യര്‍ക്കായാലും അധികം ക്ളേശമില്ലാതെ ചെയ്യാവുന്ന കാര്യങ്ങളായിരുന്നല്ലോ. പുതിയ സങ്കേതം കൈവശമാകുന്നതോടെ കംപ്യൂട്ടറിന്റെ ഭീമമായ ശക്തി നമ്മുടെ ആവശ്യമനുസരിച്ച് എടുത്ത് പ്രയോഗിക്കാനുള്ള കഴിവ് നമുക്ക് ആദ്യമായി കൈവരും. ഒരു മനുഷ്യന്‍ ഒരു വര്‍ഷമിരുന്ന് മെനക്കെട്ടാല്‍ ചെയ്യാന്‍ കഴിയാത്ത കാര്യങ്ങള്‍ കംപ്യൂട്ടറുപയോഗിച്ച് നിമിഷങ്ങള്‍ക്കുള്ളില്‍ ചെയ്യുന്ന തരത്തിലുള്ള പ്രോഗ്രാമുകള്‍ പിന്നെ നമുക്ക് എഴുതിത്തുടങ്ങാം.

-- ഫിലിപ്പ്

KIRANAM August 29, 2010 at 11:07 PM  

@ ഭാമ ടീച്ചര്‍
ഇനിയും കൂടുതല്‍ പ്രോഗ്രാമുകളുമായി അടുത്ത പാടതിനായി കാത്തിരിക്കാം.തികച്ചും profesional ആയി തന്നെ പ്രോഗ്രാം ചെയ്യാന്‍ സാധിച്ചിട്ടുണ്ട്.സോഫ്റ്റ്‌വെയര്‍ മേഖലയില്‍ ഒരു കൈനോക്കണം.

@ഫിലിപ്പ് സാര്‍
താങ്കളുടെ ആറാം പാടതിനായി ഒരുപാട് പേര്‍ ഈ ബ്ലോഗില്‍ 'കറങ്ങി തിരിയുന്നുണ്ട്‌ '. ഞങ്ങളെ വട്ടം കറക്കാതെ പാഠങ്ങള്‍ അവതരിപ്പിക്കുന്ന താങ്കളുടെ അടുത്ത പോസ്റ്റും പ്രതീക്ഷിച്ചു കൊണ്ട്

mohammed ashraf May 12, 2011 at 6:58 PM  

philip sir, I started to learn fifth lesson, very interesting.IF-ELSE is very important code I feel. I tried to make a program on quadratic equation with imaginary root. I took D=-D, But I could not get correct result on sqrD=D**1/2,"i". so after a long time I understood that I cannot divide i by 2*a, that is the reason. so I corrected my progrm. got answer. Now I am doing the activities given in the lesson. thank you

Vinod KC August 14, 2013 at 6:26 PM  

പ്രവർത്തനം 7 ചെയ്തു നോക്കി, പക്ഷേ or ഉപയോഗിച്ച് പറ്റുന്നില്ല. if മാത്രം ഉപയോഗിച്ചാൽ 7 വരികളിൽ പ്രോഗ്രാമിനെ ഒതുക്കാം. or ഉപയോഗിച്ച് ചെയ്യുന്നതെങ്ങിനെ എന്നു വിശദീകരിക്കാമോ..?

ഫിലിപ്പ് August 16, 2013 at 11:09 AM  

പ്രവർത്തനം 7-ന് താങ്കൾ എഴുതിയ പ്രോഗ്രാം ഈ വെബ്‌സൈറ്റിൽ എഴുതി അതിന്റെ ലിങ്ക് കമന്റായി കൊടുക്കാമോ? ആ വെബ്‌സൈറ്റിൽ പ്രോഗ്രാം എഴുതാൻ: ഇടതുവശത്ത് നിന്ന് Python തെരഞ്ഞെടുക്കുക; run code എന്നത് ഒഴിവാക്കുക; പ്രോഗ്രാം ചതുരത്തിൽ എഴുതി submit അമർത്തുക; തുടർന്ന് കിട്ടുന്ന പേജിലെ ലിങ്ക് കമന്റായി പറയുക.

Vinod KC August 17, 2013 at 12:20 AM  

ഇതുവരെയുള്ള താങ്കളുടെ പാഠങ്ങളുടെയെല്ലാം കമന്റുകൾ ഞാൻ വായിച്ചിരുന്നു. ഓൺലൈൻ കമ്പൈലറിന്റെ കാര്യം മുൻ കമന്റുകളിൽ നിന്ന് എനിക്ക് മനസ്സിലായിരുന്നു. എന്നോട് കോഡിന്റെ ലിങ്ക് പേസ്റ്റ് ചെയ്യാൻ മാത്രം പറഞ്ഞാൽ മതിയായിരുന്നു. സാരമില്ല. ഇതാ ലിങ്ക്.
http://ideone.com/ExHO6Z
ഇതിനു മുൻപ് or ഉപയോഗിച്ച് സാധിക്കില്ല എന്നു പറഞ്ഞത് എനിക്ക് തന്നെ പറ്റിയ ഒരു അബദ്ധമായിരുന്നു. ഞാൻ ചോദ്യം വേണ്ടത്ര മനസ്സിലാക്കിയിരുന്നില്ല. ഒന്നുകൂടി വായിച്ചു നോക്കിയപ്പോൾ ഈ ഉത്തരത്തിലെത്തി. ശരിയാണോ എന്ന് നോക്കി പറയണേ... കൂടാതെ for...next ലൂപ് കുറച്ചു കൂടി ഉദാഹരണങ്ങൾ സഹിതം പറയാമോ..?

ഫിലിപ്പ് August 17, 2013 at 4:29 AM  

താങ്കളുടെ പ്രോഗ്രാം ശരിയാണ്.

for-ന്റെ പ്രയോഗം മനസ്സിലാക്കാനായി ഇനിപ്പറയുന്ന പ്രവർത്തനങ്ങൾ ക്രമത്തിൽ ചെയ്യുക:

1. ഒരു എണ്ണൽസംഖ്യ ഇൻപുട്ട് ആയി എടുത്ത്, 1 മുതൽ ആ സംഖ്യ വരെയുള്ള എല്ലാ എണ്ണൽസംഖ്യകളും പ്രിന്റ് ചെയ്യുക.

2. ഒരു എണ്ണൽസംഖ്യ ഇൻപുട്ട് ആയി എടുത്ത്, 1 മുതൽ ആ സംഖ്യ വരെയുള്ള എണ്ണൽസംഖ്യകളിൽ മൂന്നുകൊണ്ട് ഹരിക്കാവുന്നവ മാത്രം പ്രിന്റ് ചെയ്യുക.

3. ആറാം പാഠത്തിലെ നാലാമത്തെ പ്രവർത്തനം.

ഈ മൂന്ന് പ്രവർത്തനങ്ങൾ താങ്കൾക്ക് ചെയ്യാൻ കഴിയുന്നുണ്ടോ? താങ്കൾക്ക് കിട്ടിയ ഉത്തരങ്ങൾ ലിങ്ക് ചെയ്യുക. മുൻപോട്ട് പോകാൻ ആശയം കിട്ടാത്ത തരത്തിൽ നിന്ന് പോകുന്നുണ്ടെങ്കിൽ അത് പറയുക.

Vinod KC August 17, 2013 at 11:10 PM  

ഫിലിപ്പ് സർ,
താങ്കൾ ചോദിച്ച ചോദ്യങ്ങൾക്കുള്ള ഉത്തരം ഇതാ..
ലിങ്കുകൾ യഥാക്രമം.
ചോദ്യം1- http://ideone.com/cPYL9v
ചോദ്യം2- http://ideone.com/IJ0m82
ചോദ്യം3- http://ideone.com/0nhcOF
സത്യത്തിൽ ഫോർ എനിക്ക് ആദ്യം വഴങ്ങാതിരുന്നത് അതിന്റെ വ്യാകരണം ശരിക്ക് മനസ്സിലാകാഞ്ഞതു കൊണ്ട് തന്നെയാണ്. താങ്കൾ ഫോറിന്റെ വ്യാകരണം വിശദീകരിച്ചത് ഞാൻ പലവുരു വായിച്ചു. ഒടുവിൽലൊരു പരീക്ഷണം നടത്താമെന്നു തോന്നി.

ഫിലിപ്പ് August 18, 2013 at 2:47 AM  

ശ്രീ വിനോദ്,

പ്രോഗ്രാമിംഗിൽ സൂക്ഷ്മത വളരെ പ്രധാനപ്പെട്ട കാര്യമാണ്. നമുക്ക് വേണ്ടത് എന്താണെന്ന് കൃത്യമായി മനസ്സിലാക്കുകയും, അത് കൃത്യത നഷ്ടപ്പെടാതെ പ്രോഗ്രാമാക്കി മാറ്റുകയും ചെയ്യാൻ പഠിക്കുക എന്നത് തുടക്കം മുതലേ പരിശീലിക്കേണ്ട കാര്യമാണ്. താങ്കൾക്ക് for-ന്റെ പ്രയോഗം മനസ്സിലായെങ്കിലും, ആദ്യത്തെ രണ്ട് പ്രോഗ്രാമിലും ചെറിയ തെറ്റുകൾ (ബഗ്) ഉണ്ട്.

എന്റെ ആദ്യത്തെ ചോദ്യത്തിന്റെ വാച്യാർത്ഥം ശ്രദ്ധിച്ച് മനസ്സിലാക്കുക. 5 ഇൻപുട്ട് ആയി കിട്ടിയാൽ ഈ ചോദ്യത്തിന് ഉത്തരമായി എഴുതുന്ന പ്രോഗ്രാം എന്താണ് ഔട്‌പുട്ട് തരേണ്ടതെന്ന് സൂക്ഷിച്ച് ആലോചിച്ച് (പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കാതെ) കണ്ടുപിടിച്ച് എഴുതി വയ്ക്കുക. ഇനി താങ്കളുടെ പ്രോഗ്രാമിന് 5 ഇൻപുട്ട് കൊടുത്തുനോക്കുക. എഴുതിവച്ച ഔട്‌പുട്ടും കിട്ടിയ ഔട്‌പുട്ടും ഒത്തുപോകുന്നുണ്ടോ?

ഇപ്പോൾ മനസ്സിലായതുവച്ച് രണ്ടാമത്തെ പ്രോഗ്രാമും ശരിയാക്കുക.

Vinod KC August 18, 2013 at 2:22 PM  

ആദ്യത്തെ പ്രോഗ്രാം ഞാൻ ഉദ്ദേശിച്ചതു പോലെ തന്നെ അഞ്ചിനും ഒന്നിനും ഇടയിലുള്ള 1,2,3,4 എന്നിവ പ്രിന്റ് ചെയ്തു.
പക്ഷേ ഞാൻ ഉദ്ദേശിച്ചതിൽ നിന്ന് വ്യത്യസ്തമായി സംഖ്യകൾ താഴെയായിട്ടാണ് പ്രിന്റ് ചെയ്തത് എന്നു മാത്രം.
രണ്ടാമത്തെ പ്രോഗ്രാമിന്റെ ചോദ്യം എന്നത് ഒന്നിനും ഇൻപുട്ട് സംഖ്യയ്ക്കും ഇടയിൽ മൂന്നു കൊണ്ട് നിശ്ശേഷം ഹരിക്കാവുന്ന
സംഖ്യകൾ പ്രിന്റ് ചെയ്യുക എന്നതാണല്ലോ
താങ്കളുടെ നിർദ്ദേശപ്രകാരം ഇവിടെ ഇൻപുട്ട് 5 കൊടുത്തു. ഒന്നിനും അഞ്ചിനും ഇടയിൽ മൂന്നു കൊണ്ട് നിശ്ശേഷം
ഹരിക്കാവുന്ന ഏകസംഖ്യയായ 3 പ്രിന്റ് ചെയ്യുന്നു. ഉത്തരം ശരിയാണല്ലോ.. എവിടെയാണ് ബഗ് ഉള്ളത്..?
എന്റെ അശ്രദ്ധയാണെങ്കിൽ ദയവായി ബഗ് കാട്ടിത്തരുവാൻ അപേക്ഷിക്കുന്നു.

ഫിലിപ്പ് August 18, 2013 at 8:37 PM  

എന്റെ ചോദ്യം ഇതായിരുന്നില്ലേ:

1. ഒരു എണ്ണൽസംഖ്യ ഇൻപുട്ട് ആയി എടുത്ത്, 1 മുതൽ ആ സംഖ്യ വരെയുള്ള എല്ലാ എണ്ണൽസംഖ്യകളും പ്രിന്റ് ചെയ്യുക.

1 മുതൽ 5 വരെയുള്ള എണ്ണൽ സംഖ്യകൾ ഏതൊക്കെയാണ്? താങ്കളുടെ ആദ്യത്തെ പ്രോഗ്രാം ഇവയെല്ലാം പ്രിന്റ് ചെയ്യുമോ?

നല്ല രീതിയിൽ പ്രോഗ്രാമിംഗ് വശത്താക്കണമെങ്കിൽ കൃത്യത ശീലിക്കേണ്ടത് വളരെ ആവശ്യമാണ്. ചോദ്യം കൃത്യമായി മനസ്സിലാക്കുകയാണ് ഇതിൽ ആദ്യ പടി. താങ്കളുടെ പ്രോഗ്രാം ചെയ്യുന്നതും എന്റെ ചോദ്യം ചെയ്യാൻ ആവശ്യപ്പെട്ടതും തമ്മിൽ ചെറിയ വ്യത്യാസമേയുള്ളൂ. ഈ ചെറിയ വ്യത്യാസം പോലും വരാത്ത രീതിയിൽ തുടക്കം മുതൽ പരിശീലിച്ചാൽ നല്ലൊരു പ്രോഗ്രാമർ ആകാൻ കഴിയും.

ഇതിന്, ഓരോ തവണയും ചോദ്യം കൃത്യമായി മനസ്സിലാക്കി എന്ന് ഉറപ്പുവരുത്തുക. ചെറിയ ഇൻപുട്ടുകളിൽ എന്ത് ഔട്‌പുട്ടാണ് പ്രതീക്ഷിക്കുന്നത് എന്ന് എഴുതിനോക്കുക. ഈ എഴുതിയതും ചോദ്യത്തിൽ പറയുന്നതും ചേരുന്നുണ്ടോ എന്ന് നോക്കുക. ഇനി മാത്രം പ്രോഗ്രാമിനെപ്പറ്റി ആലോചിക്കുക. ഇക്കാര്യത്തിൽ ചെറിയ "ചോർച്ചകൾ" ഉണ്ടാകാൻ സമ്മതിക്കാതിരിക്കുക.

താഴെയായി പ്രിന്റ് ചെയ്യുന്നത് print എന്ന കമാന്റിന്റെ പ്രത്യേകതയാണ്. ഇത് കാര്യമാക്കേണ്ടതില്ല.

പകര്‍പ്പവകാശ സൂചന

SyntaxHighlighter