0

Ive made code that lets me write in numbers in lines, but now, out of all the numbers i get I have to make the comp. print the ones that are nicely divisible by 2 So far this is what ive got:

i = 0
x = 1
y = 0
z = 20
My_file = open("Numbers", 'w')
while i < z:
    My_file.write(str(x))
    My_file.write("\n")
    x = x + 1
    i = i + 1
My_file.close()
i = 0
My_file = open("Numbers", 'r')
for line in My_file:
    if int(My_file.readline(y)) % 2 == 0:
        print(My_file.readline(y))
    y = y + 1

The top part work, my problem is the one int(My_file.readline(y)) % 2 == 0 is crap, it says:

invalid literal for int() with base 10: ''.

4 Answers 4

1

Each line contains a line break ("2\n"), you need to remove \n before converting to number:

...
My_file = open("Numbers", 'r')
for line in My_file:
    line = line.strip() # removes all surrounding whitespaces!
    if int(line) % 2 == 0:
        print(line)
    y = y + 1

Out:

2
4
6
8
10
12
14
16
18
20
Sign up to request clarification or add additional context in comments.

Comments

1

Based on previous answers, here's a fully working example:

start_value = 1
max_value = 12
filename = "numbers"

with open(filename, "w") as my_file:
    value = start_value
    while value <= max_value:
        my_file.write(f"{value}\n")
        value += 1

with open(filename, "r") as my_file:
    lines = my_file.readlines()

for line in lines:
    line = line.strip()
    if int(line) % 2 == 0:
        print(line)

This code makes use of the "context manager" of python (the with keyword). Used with open(), it handles nicely the closing of the file.

Your error came from a \n at the end of each number. The conversion from str to int didn't work because the interpreter couldn't find out how to convert this character.

As a good practice, use meaningful variables names, even more when you ask questions here: it helps people understanding the code faster.

Comments

0

Does this help:

MAXINT = 20
FILENAME = 'numbers.txt'

with open(FILENAME, 'w') as outfile:
    for i in range(1, MAXINT+1):
        outfile.write(f'{i}\n')
with open(FILENAME) as infile:
    for line in infile:
        if int(line) % 2 == 0:
            print(line, end='')

Comments

0

This works:

FILE_NAME = 'Numbers.txt'
MAX_NUMBER = 20

with open(FILE_NAME, 'w') as file:
    numbers = list(map(str, range(MAX_NUMBER)))
    for n in numbers:
        file.write(n)
        file.write('\r')
with open(FILE_NAME, 'r') as file:
    for number in file:
        if int(number) % 2 == 0:
            print(number, end='')

Output:


0
2
4
6
8
10
12
14
16
18

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.