Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Python: Display all even numbers between two integers inclusive, with a limit the number of times the code accepts input

Link to question: https://www.spoj.com/UTPEST22/problems/UTP_Q2/
From what I understand, the question is divided into 2 parts:

  1. Input
  • The first input is an integer that limits the number of time the user can provide a set of integers.
  • From the second line onwards, the user provides the sequence of integers up until the specified limit.
  • The set of integers are arranged in ascending order, separated only by a space each.
  1. Output
  • For each sequence of integers, the integers in it are looped over. Only those that are even are printed as outputs horizontally.
from sys import stdin

for x in range(1, 1+ int(input())):
# number of cases, number of times the user is allowed to provide input

    for line in stdin:
        num_list = line.split()
        # remove the space in between the integers
        num = [eval(i) for i in num_list]
        # change the list of numbers into integers each
        
        for numbers in range(num[0], num[-1] + 1):
        # the first integer is the lower bound
        # the second the upper bound
            if numbers % 2 == 0:
            # modulo operation to check whether are the integers fully divisible
                print(numbers, end = ' ')
                # print only the even numbers, horizantally

Can anyone please provide some insights on how to make changes to my code, specifically the loop. I felt so messed up with it. Screenshot of the result.

Any help will be appreciated.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You can use restructure the code into the following steps:

  1. Read each case. You can use the input function here. A list comprehension can be used to read each line, split it into the lower and upper bound and then convert these to integers.

  2. Process each case. Use the lower and upper bounds to display the even numbers in that range.

Here is an example solution:

n = int(input())

cases = []

for case in range(n):
    cases.append([int(x) for x in input().split()])

for case in cases:
    for val in range(case[0], case[1] + 1):
        if val % 2 == 0:
            print(val, end=' ')
    print()

This will produce the following desired output:

4 6 8 10 12 14 16 18 20 
2 4 6 8 10 12 14 16 
-4 -2 0 2 4 6 
100 102 104 106 108 

Alternative Solution: You can simplify this further by unpacking range:

n = int(input())

cases = []

for case in range(n):
    cases.append([int(x) for x in input().split()])

for case in cases:
    lower = case[0] if case[0] % 2 == 0 else case[0]
    print(*range(lower, case[1] + 1, 2))
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading