patternpythonMinor
Project Euler problems 1 and 2 in python
Viewed 0 times
projectpythoneulerandproblems
Problem
What do you think about my code? I am a beginner and just started doing some algorithmic exercises to sharpen up my python skills.
Here is code for problem #1:
Problem 2:
I'm sure there are better ways to solve those problems but would like to see what you think about my quite simple idea.
Here is code for problem #1:
"""If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9.
The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000."""
x = 0
for i in range(1000):
if i % 3 == 0 or i % 5 == 0:
x += i
print(x)Problem 2:
"""Each new term in the Fibonacci sequence is generated by adding the previous two terms.
By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million,
find the sum of the even-valued terms."""
numbers = [1, 2]
total = 0
for i in range(4000000):
if i == numbers[-1] + numbers[-2]:
numbers.append(i)
for n in numbers:
if n % 2 == 0:
total += n
print(total)I'm sure there are better ways to solve those problems but would like to see what you think about my quite simple idea.
Solution
Problem 1 is probably better and more pythonic when written as a list comprehension:
For the second problem I would recommend a generator and to use
This way only two ints are ever in memory (well three if you count
x = sum(i for i in range(1000) if i % 3 == 0 or i % 5 == 0)
print(x)For the second problem I would recommend a generator and to use
sum again:def fibonacci(max_n):
n, prev = 1, 1
while n <= max_n:
yield n
n, prev = n + prev, n
total = sum(n for n in fibonacci(4000000) if n % 2 == 0)
print(total)This way only two ints are ever in memory (well three if you count
max_n). In comparison, your code has a list of possibly large size.Code Snippets
x = sum(i for i in range(1000) if i % 3 == 0 or i % 5 == 0)
print(x)def fibonacci(max_n):
n, prev = 1, 1
while n <= max_n:
yield n
n, prev = n + prev, n
total = sum(n for n in fibonacci(4000000) if n % 2 == 0)
print(total)Context
StackExchange Code Review Q#149143, answer score: 6
Revisions (0)
No revisions yet.