rhino_o
@rhino_o
Студент

Как найти ошибку в моем скрипте (python)?

Всем привет! Около месяца изучаю Python и впечатления очень хорошие. Изученное хотел закрепить практикой и придумывал себе разные задачи. На сегодня, хотел сделать программу которая определять простое или сложное число. Вообщем, код получился вот таким:
def Simple(n):
    h=2
    while n > h:   
        if n%h != 0:
            itog = "True"
            
        else:
            itog = "False"
            break
        h = h+1
    if itog == "True":
        print ("{0} - Простое число".format(n))
    else:
        print("{0} - Сложное число".format(n))
n = int(input("Введите число:\n"))
while n > 1:
    Simple(n)
    n = n - 1

Программа работает, но в конце пишет:
Traceback (most recent call last):
File "C:\Python33\ex\simple_2.py", line 18, in
Simple(n)
File "C:\Python33\ex\simple_2.py", line 12, in Simple
if itog == "True":
UnboundLocalError: local variable 'itog' referenced before assignment
Помогите исправить ошибку, а то я не понял в чем ошибка..
  • Вопрос задан
  • 3835 просмотров
Решения вопроса 1
mysticmirage
@mysticmirage
У вас в процедуре Simple при n <= h цикл while не выполняется. Следовательно, переменная itog не определяется. Не буду обсуждать ваш алгоритм нахождения простых чисел, но попробуйте установить itog в False перед циклом. Как-то так:

def Simple(n):
    h=2
    itog = False
    while n > h:   
        if n%h != 0:
            itog = True
        else:
            break
        h = h+1
    if itog == "True":
        print ("{0} - Простое число".format(n))
    else:
        print("{0} - Сложное число".format(n))
n = int(input("Введите число:\n"))
while n > 1:
    Simple(n)
    n = n - 1

P.S. Как уже написали выше, вместо строк нужно использовать True/False без кавычек.

P.P.S. Ещё пара замечаний:

1. Если тип переменной - логический (boolean), то можно вместо
if itog == True
использовать просто
if itog

2. Обычно функции (процедуры) в Питоне пишутся со строчной буквы (under_score-нотация). С заглавной (CamelCase) принято именовать классы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SolidlSnake
@SolidlSnake
Ваш дружелюбный сосед
Не пойму, а зачем вы используете вместо логических значений строки?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы