Гузариш ба мундариҷа
Мавзӯи 2 аз 18

Вуруди маълумот

То ҳол барномаҳои мо ҳамеша як корро мекарданд: ададҳо рост дар код навишта шуда буданд. Барномаи ҳақиқӣ маълумотро аз берун — аз корбар ё аз файл — мегирад ва бо ҳар гуна қиматҳо кор мекунад. Дар ин мавзӯъ хондани маълумоти вурудро меомӯзем.

Масъалаҳо чӣ тавр санҷида мешаванд

Дар масъалаҳои ин курс барномаи ту маълумоти вуруд мегирад ва бояд маълумоти хуруҷ-ро чоп кунад. Системаи санҷиш барномаро бисёр бор бо вурудҳои гуногун иҷро мекунад ва хуруҷи онро бо ҷавоби дуруст муқоиса мекунад.

Маълумоти вуруд Барнома Маълумоти хуруҷ
он чи барнома мехонад коди ту он чи барнома бо print чоп мекунад

Бинобар ин муҳим аст: барнома бояд танҳо ҷавобро чоп кунад — бе салом, шарҳ ва маслиҳат.

input() — хондани як сатр

Функсияи input() интизор мешавад, ки дар маълумоти вуруд сатр пайдо шавад, ва онро ҳамчун матн (навъи str) бармегардонад.

name = input()
print("Салом,", name)

Агар дар маълумоти вуруд сатри Ада бошад, барнома Салом, Ада-ро чоп мекунад.

Ҳар даъвати input() сатри навбатиро мехонад. Ду сатри вуруд — ду даъват:

city = input()
country = input()
print(city, "дар кишвари", country, "ҷойгир аст")
Вуруд Хуруҷ
Хуҷанд<br>Тоҷикистон Хуҷанд дар кишвари Тоҷикистон ҷойгир аст

⚠️ Дар дохили қавсҳо маслиҳате мисли input("Номро ворид кунед: ") нанавис. Ин матн ба хуруҷ чоп мешавад, ва системаи санҷиш ҷавобро нодуруст ҳисоб мекунад.

Сатр ҳанӯз адад нест

input() ҳамеша матн бармегардонад, ҳатто агар рақам ворид карда шуда бошад. Бо матн арифметика на мисли ададҳо кор мекунад:

x = input()   # 2 ворид карданд
y = input()   # 3 ворид карданд
print(x + y)  # 23 — сатрҳо часпиданд!

Барои гирифтани адад сатрро бо функсияи int() (аз integer — «бутун») ба адад табдил медиҳанд:

x = int(input())   # 2 — аллакай адад
y = int(input())   # 3
print(x + y)       # 5

Навишти int(input()) аз дарун ба берун хонда мешавад: аввал input() сатрро мехонад, баъд int() онро ба адади бутун табдил медиҳад.

Барои ададҳои касрӣ float() ҳаст:

price = float(input())   # 99.5 ворид карданд
print(price * 2)         # 199.0

Мисол: барнома синну солро мехонад ва чоп мекунад, ки пас аз 10 сол одам чандсола мешавад.

age = int(input())
print(age + 10)

Агар int()-ро фаромӯш кунӣ, хато мешавад: Python сатрро бо адад ҷамъ карда наметавонад ва TypeError: can only concatenate str (not "int") to str хабар медиҳад. Агар чунин хаторо бинӣ — санҷ, ки сатрро ба адад табдил додаӣ ё не.

Якчанд адад дар як сатр

Аксар вақт дар маълумоти вуруд якчанд адад дар як сатр бо фосила навишта шудаанд, масалан 4 9. Дар ин ҷо як int(input()) кор намекунад: сатри "4 9"-ро ба як адад табдил додан мумкин нест.

Барои ин ҳолат сохтори тайёрро дар хотир гир:

a, b = map(int, input().split())

Он чӣ тавр кор мекунад, қадам ба қадам:

  1. input() сатри "4 9"-ро мехонад;
  2. .split() онро аз рӯи фосилаҳо ба қисмҳои "4" ва "9" мебурад;
  3. map(int, ...) ҳар қисмро ба адади бутун табдил медиҳад;
  4. a, b = ... натиҷаҳоро ба тағйирёбандаҳо тақсим мекунад: a = 4, b = 9.

split ва map-ро муфассал дар мавзӯи рӯйхатҳо дида мебароем, ҳоло ин сатрро ҳамчун асбоби тайёр истифода бар. Шумораи тағйирёбандаҳо дар тарафи чап бояд бо шумораи ададҳо дар сатр мувофиқ бошад:

x, y, z = map(int, input().split())   # сатр мисли: 10 20 30
print(x - y + z)                       # 20

Агар ададҳо дар сатр аз тағйирёбандаҳо зиёд ё кам бошанд, хатои ValueError мешавад.

Таҳлили формати маълумоти вуруд

Пеш аз навиштани код қисми «Маълумоти вуруд»-ро дар шарт бодиққат хон ва ба ду савол ҷавоб деҳ:

  • Дар маълумоти вуруд чанд сатр ҳаст? Ҳамон қадар бор хондан лозим аст.
  • Дар ҳар сатр чӣ ҳаст? Як адад — int(input()), якчанд адад — map(int, input().split()), матн — танҳо input().

Масалан, шарт мегӯяд: «Дар сатри аввал як адад — шумораи хонандагон. Дар сатри дуюм бо фосила — қади пасттарин ва баландтарин хонанда». Он гоҳ хондан чунин мешавад:

count = int(input())
low, high = map(int, input().split())

Якчанд ҷавоб

Агар якчанд ададро дар сатрҳои гуногун баровардан лозим бошад, print-ро якчанд бор даъват кун. Агар дар як сатр бо фосила — онҳоро ба як print бо вергул деҳ:

w, h = map(int, input().split())
print(w + h)          # сатри якуми хуруҷ
print(w - h)          # сатри дуюми хуруҷ
print(w, h, w * h)    # сатри сеюм: се адад бо фосила

Тартиб муҳим аст: ҷавобҳоро маҳз бо ҳамон тартибе чоп кун, ки дар қисми «Маълумоти хуруҷ» нишон дода шудааст.

Ададҳои калон

Дар Python ададҳои бутун метавонанд ҳар қадар калон бошанд: 10**18 ё боз калонтар дақиқ ҳисоб карда мешавад. Бинобар ин агар дар маҳдудиятҳо ададҳое мисли 109 бошанд, дар бораи пуршавӣ (переполнение) хавотир шудан лозим нест — баръакси бисёр забонҳои дигар.

Хулоса

  • input() як сатри маълумоти вурудро ҳамчун матн мехонад;
  • int(input()) — хондани адади бутун, float(input()) — касрӣ;
  • a, b = map(int, input().split()) — хондани якчанд адад аз як сатр;
  • аввал формати вурудро таҳлил кун, баъд код навис;
  • танҳо ҷавобро чоп кун, бе калимаҳои зиёдатӣ.