প্রতিযোগিতামূলক প্রোগ্রামিং-এ ইনপুট যত দ্রুত পড়া যায়, তত সুবিধা मिलে। এই লেখায় পাইথনে বিভিন্ন I/O মেথড আলোচনা করা হলো।
মান लीজিয়ে, আপনি কোডফোর্স বা এসপিওজে (SPOJ) এর মত অনলাইন জাজে আছেন এবং a, b, c, d চারটি সংখ্যা পড়ে তাদের গুণফল প্রিন্ট করতে হবে। এটাকে করতে একাধিক পদ্ধতি রয়েছে।
পদ্ধতি ১: লিস্ট কম্প্রিহেনশন ব্যবহার করে
a, b, c, d = [int(x) for x in input().split()] print(a * b * c * d)
পদ্ধতি ২: map ফাংশন ব্যবহার করে
a, b, c, d = map(int, input().split()) print(a * b * c * d)
আরেকটি দ্রুত পদ্ধতি হলো stdin এবং stdout ব্যবহার করা।
পদ্ধতি ১ক: stdin এবং stdout দিয়ে লিস্ট কম্প্রিহেনশন
from sys import stdin, stdout a, b, c, d = [int(x) for x in stdin.readline().rstrip().split()] stdout.write(str(a * b * c * d) + "\n")
SPOJ INTEST সমস্যা সমাধান
ইনপুট: শুরুতে দুটি পজিটিভ ইন্টিজার n k (n, k ≤ 10⁷)। পরবর্তী n লাইনে একটি করে পজিটিভ ইন্টিজার tᵢ (≤ 10⁹)।
আউটপুট: কতগুলো tᵢ k-দিয়ে বিভাজ্য, সেটি প্রিন্ট করুন।
পদ্ধতি ১: সাধারণ পদ্ধতি (কম দক্ষ)
def main():
n, k = [int(c) for c in input().split()]
cnt = 0
for _ in range(n):
t = int(input())
if t % k == 0:
cnt += 1
print(cnt)
if __name__ == "__main__":
main()
পদ্ধতি ২: stdin এবং stdout ব্যবহার (আরো দক্ষ)
from sys import stdin, stdout
def main():
n, k = [int(c) for c in input().split()]
cnt = 0
for _ in range(n):
t = int(stdin.readline())
if t % k == 0:
cnt += 1
stdout.write(str(cnt))
if __name__ == "__main__":
main()
পদ্ধতি ৩: পুরো ইনপুট একসাথে পড়া (সর্বোচ্চ দক্ষ)
from sys import stdin, stdout
def main():
n, k = stdin.readline().split()
n = int(n)
k = int(k)
cnt = 0
lines = stdin.readlines()
for line in lines:
if int(line) % k == 0:
cnt += 1
stdout.write(str(cnt))
if __name__ == "__main__":
main()
নোট: পদ্ধতি ৩ সবচেয়ে দ্রুত কারণ এখানে পুরো ইনপুট একবারে মেমরিতে লোড করা হয় এবং লুপে প্রতিবার সিস্টেম কল না করে সরাসরি লিস্ট থেকে ডেটা নেওয়া হয়।