2016-01-11 2 views
-1

Я начинаю на Python и получаю это сообщение об ошибке: NameError: name 'z' is not defined.NameError/"name is not defined" в Python

Мой код, который вызывает ошибку:

num = int(input("enter the max: ")) 
for i in range (2, num): 
    is_prime = True 
    for z in range (2, i): 
     if i % z ==0: 
      is_prime = False 
    if is_prime: 
    print(z) 
+0

, пожалуйста, отформатируйте свой код – prasun

ответ

0

Вы используете z вне for z in range (2, i): блока. The z, предполагая, что это делитель детерминированного, не простое число, может быть сохранено в переменной для вывода его за пределы for блока:

num = int(input("enter the max: ")) 
for i in range (2, num): 
    is_prime = True 
    divisable_by = 0 
    for z in range (2, i): 
     if i % z ==0: 
      is_prime = False 
      divisable_by = z 
    if is_prime: 
     print(divisable_by) 

Использование более описательные имена переменных, удаление дополнительная переменная:

max = int(input("enter the max: ")) 
# print all prime numbers up to (max) 
for number in range (2, max): 
    divisable_by = 0 
    for divisor in range (2, int(math.sqrt(number))): 
     if number % divisor == 0: 
      is_prime = False 
      divisable_by = divisor 
    if divisable_by != 0: 
     print(divisable_by) 

Примечание: ограниченный внутренний цикл, чтобы 2...squareroot(number to check) повысить производительность за счет немного.