Labas, Pasauli!

Įvestis konsolėje ir apdorojimas

VP
Vilius P.
2024-09-09
2024-09-18

Išmoksite būdą, kaip įvesti duomenis į mūsų kuriamas programas, tai darysime per terminalą (juodą langą). Terminalas (dar vadinamas komandine eilute, kartais konsole) yra tekstu paremta naudotojo sąsaja. Kalbant apie kompiuterius, sąsaja tai komunikacijos taškas tarp naudotojo ir įrenginio. Sąsaja programavime gali turėti ir kitą reikšmę, bet apie tai sužinosite, kai mokysitės kitų programavimo kalbų.

Šioje juodo lango sąsajoje galima gauti informacija, o taip ir ją ir perduoti programai, ką čia ir išmoksite.

Nors ir terminalas atrodo neįprastai, gal šiek tiek bauginančiai pradedančiajam programuotojui, bet šis įrankis yra neišvengiama programuotojo darbo dalis. Vėliau išmoksite kurti ir kitokio tipo sąsajas.

Įvedimas

Funkcija input()

Tereikia žinoti vieną funkciją duomenų įvedimui iš terminalo: input(). Šios funkcijos rezultatas: string tipo reikšmė. Pabandykite įvykdyti šį kodą:

.py
input()

Įvykdžius, šį kodą turėtų atsirasti galimybė rašyti terminale. Paspaudžius enter programa turėtų pasibaigti.

Kodą galima papildyti ir naudotojui pateikti žinutę, po kurios galima įrašyti tekstą:

.py
input("What is your name? ")

Kadangi input() funkcijos gražina reikšmę, o ji yra string tipo, ją galima priskirti kintamajam ir perpanaudoti.

.py
name = input("What is your name? ")
print("Hello, " + name)

Tokio kodo rezultatas:

cmd
What is your name? Vilijus
Hello, Vilijus!

Reikšmių apdorojimas

Sukurkime kodą, kuris sudėtų du skaičius įvestus iš terminalo:

.py
a=input("Input first number: ")
b=input("Input second number: ")
result=a+b
print("Result: " + result)

Toks kodas tokiai užduočiai neturėtų tikti, kadangi gaunamas rezultatas toks:

cmd
Input first number: 15
Input second number: 23
Result: 1523

Tai atsitinka todėl, kad įvestis yra tipo string, tą galima pamatyti su type() funkcija. Tai ankstesniame kode mes sudėjome su eilutės tipo kintamuosius.

.py
a=input("Input first number: ")
b=input("Input second number: ")

print("Type of a:")
print(type(a))

print("Type of b:")
print(type(b))

result=a+b
print("Type of result:")
print(type(result))
print("Result: " + result)

Kodo išvestis:

cmd
Input first number: 12
Input second number: 5
Type of a:
<class 'str'>
Type of b:
<class 'str'>
Type of result:
<class 'str'>
Result: 125

Kaip ir daugelyje programavimo kalbų, taip ir mūsų naudojamoje yra būdas paversti eilutės tipo reikšmes į realių skaičių tipą. Python kalboje yra du realių skaičių tipai: int (sveikieji) ir float (slankiojo kablelio skaičiai - skaičiai su kableliais).

Reikšmės pakeitimoas iš vieno į kitą vadinimas vadinamas type casting. Tą darysime su trimis funkcijomis:

  • int() - reikšmės pavertimas į int tipo reikšmę;
  • float() - reikšmės pavertimas į float tipo reikšmę;
  • str() - reikšmės pavertimas į str tipo reikšmę.

Šioms funkcijoms tereikia pateikti, kaip argumentą, reikšmę skliausteliuose:

.py
a_string="15"
print("Type of a_string:")
print(type(a_string))

a_int=int(a_string)
print("Type of a_int:")
print(type(a_int))

a_float=float(a_string)
print("Type of a_float:")
print(type(a_float))

Kodo išvestis:

cmd
Type of a_string:
<class 'str'>
Type of a_int:
<class 'int'>
Type of a_float:
<class 'float'>

Pritaikykime šį kodą skaičių sudėjimui, kurie pateikia per terminalą:

.py
a_input=input("Input first number: ")
b_input=input("Input second number: ")

a=int(a_input)
b=int(b_input)

result=a+b
print("Result: " + str(result))

Kodo išvestis:

cmd
Input first number: 15
Input second number: 200
Result: 215

Netinkama įvestis

Pabandykite vietoje skaičiaus įvestis žodį. Programa turėtų sugriūti ir terminale atsirasti klaidos tekstos (gali būti šiek tiek kitoks):

cmd
Input first number: 90
Input second number: kugelis
Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/pygame/.vscode/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 39, in <module>
    cli.main()
  File "/home/pygame/.vscode/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 430, in main
    run()
  File "/home/pygame/.vscode/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 284, in run_file
    runpy.run_path(target, run_name="__main__")
  File "/home/pygame/.vscode/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 321, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "/home/pygame/.vscode/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 135, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/home/pygame/.vscode/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 124, in _run_code
    exec(code, run_globals)
  File "/home/pygame/development/pyt.py", line 5, in <module>
    b=int(b_input)
ValueError: invalid literal for int() with base 10: 'kugelis'

Eilutė ValueError: invalid literal for int() with base 10: 'kugelis' nurodo, kad int() pateiktas blogas argumentas - ne dešimtainis skaičius.

Programavime tokios klaidos dar vadinamos išimtimis, o priemonės, kurių imamasi, kad jų būtų išvengta - išimčių tvarkymu. Apie tai giliau sužinosite kituose skyriuose. Dabar šią techniką naudokite, kaip šabloną. Padaryti taip, kad programa veiktų teisingia reikia naudoti raktažodžius try/except:

.py
try:
  print(x) 
except:
  print("An exception occurred") # this will be executed if print(x) throws an error

Sakiniai po try vykdomi tokia tvarka įprastai. Jeigu nors vienoje eilutėje įvyksta klaida, iš karto pradedami vykdyti visi sakiniai, kurie yra po except raktažodžiu. Panaudokimi šiuos principus sutvarkant dviejų skaičių sudėjimo programą:

.py
a=0
b=0

a_input=input("Input first number: ")
b_input=input("Input second number: ")

try:
    a=int(a_input)
except: 
    print("The first input is not a number, it will be considered as 0")

try:
    b=int(b_input)
except: 
    print("The second input is not a number, it will be considered as 0")

result=a+b
print("Result: " + str(result))

Įrašius vietoje antro skaičiaus ne skaičių, gauname tokią išvestį:

cmd
Input first number: 9009 
Input second number: two
Second input is not a number, it will be considered as 0
Result: 9009

Šiuo atveju, jeigu įvedamas žodis, skaičius nekeičia reikšmės iš numatytos (0), kurios nustatomos pirmose eilutėse. Klaidos apdorojimą būdą dažnai nusprendžia pats programuotojas pagal situaciją. Tokią situaciją galima spręsti ir kitaip - išjungiant programą gavus blogą įvestį. Tai galima padaryti su quit()(jeigu įdomu - yra ir kitokių būdų):

.py
a_input=input("Input first number: ")
b_input=input("Input second number: ")

try:
    a=int(a_input)
except: 
    print("The first input is not a number; the program will exit")
    quit()

try:
    b=int(b_input)
except: 
    print("The second input is not a number; the program will exit")
    quit()

result=a+b
print("Result: " + str(result))

Užduotys

1. Temperatūros konvertavimas

Parašykite programa, kuri terminale pateiktą farenheitais temperatūrą paverstų į celsijų. Reikalinga formulė: .

2. Skaičiaus tipas

Paraškite programa, kuri patikrintų, ar įvesti yra sveikasis skaičius, ar slankiojo kablelio.

Programos pavyzdinės išvestys:

cmd
Enter a number: 54
The input is an integer.
cmd
Enter a number: 14.4
The input is a float.
cmd
Enter a number: not a number
Input is neither an integer nor a float.

3. Didesnis skaičius

Parašykite programa, kuri patikrintų, kuris tarp dviejų įvestų skaičių yra didesnis

Pavyzdinė programos eiga:

cmd
Enter the first number: 7
Enter the second number: 10
The first number is bigger than the second number.

4. Lyginis ar nelyginis

Parašykite programa, kuri patikrintų, ar įvestas skaičius yra lyginis ar nelyginis:

Pavyzdinė programos eiga:

cmd
Enter a number: 5
The number is odd.

5. Skaičiuotuvas

Sukurkite skaičiuotuvą, kuris naudojantis 4 operatoriais (+, -, *, /) galėtų atlikti veiksmus tarp dviejų skaičių.

Pavyzdinė programos eiga:

cmd
Enter the first number: 8
Enter the second number: 4
Enter operation (+, -, *, /): /

The result is 2.

Sukurta
su meile

Kontaktai

2024 — Vilius P.