First, the answer to your specific question. You are discarding the primes less than the square root of n. The easiest fix is to change the line num[i] = False
to num[i] = (not x == i)
at the end of your inner loop (I think that works, I haven't tested it).
Second, your algorithm is trial division, not the Sieve of Eratosthenes, and will have time complexity O(n^2) instead of O(n log log n). The modulo operator gives the game away. The simplest Sieve of Eratosthenes looks like this (pseudocode, which you can translate into Python):
function primes(n)
sieve := makeArray(2..n, True)
for p from 2 to n step 1
output p
for i from p+p to n step p
sieve[i] := False
There are ways to improve that algorithm. If you're interested in programming with prime numbers, I modestly recommend this essay, which includes an optimized Sieve of Eratosthenes with implementation in Python.