Hello Everyone!
[Short and clear] I was working on a Python template that can read any input - irrespective of the input format. Poorly formatted inputs are not uncommon in External contests and that shouldn’t be a problem for Pythonistas. So, I wrote a small script that can handle such inputs.
Here’s the script.
Using stdin and regex modules
# Use this at the very start of the script
from sys import stdin
from re import findall
# Other imports
# Other classes or functions, if any
class IO:
def __init__(self):
self.__inputs = findall('[^\n ]+', stdin.read())
self.__N = len(self.__inputs)
self.__index = 0
def has_next(self):
return self.__index < self.__N
def next(self):
self.__index += 1
return self.__inputs[self.__index - 1]
# Main function or logic
Here’s how you can use it
Basic Usage
io = IO()
for i in range(int(io.next())):
print(io.next())
Code faster using the following style
Referencing style
# input is no longer an inbuilt function
input = IO().next
for test in range(int(input())):
n = int(input())
l = []
for i in range(n):
l.append(int(input()))
print(sum(l))
Basically, the script breaks the input into tokens that match the Regular expression '[^\n ]+'
. It matches any character except '\n'
and white spaces.
- Given an Integer N and a sequence of N integers, find the sum of elements of the sequence. There are T test cases. Can your Python solution run perfectly against the following variants of input?
Well formatted
2
3
4 1 -2
5
8 11 12 13 1
Randomly scattered
2
3 4
1 -2 5
8
11
12 13
1
This is a very basic template I wanted to share. Interested can modify it based on their needs. Also, this cannot be used to read a Sequence of Integers at once, as we can do with the inbuilt input()
function.
Note: I am not sure if it works for interactive problems.