Я только начинаю изучать Python. Как мне можно исправить возникшую ошибку?

Я пишу код для <b>имитации</b> входа в "систему". <br/> У меня возникла проблема: если "Уникальный ID" <b>НЕ</b> делится на два, то программа всё равно выводит сообщение "У нас возникли технические проблемы". <br/> Вот мой код: <br/> import random <br/> import time <br/> login = str(input("Введите логин: ")); <br/> password = str(input("Введите пароль: ")); <br/> print("Ваш логин:",login,"Ваш пароль:",password) <br/> if login == "GLaDOS" and password == "tier3": <br/> print("Создание уникального ID") <br/> time.sleep(3) <br/> number = random.randint(20, 35); <br/> print("Ваш ID:", number); <br/> FAULT = int(input("Введите ваш уникальный ID: ")); <br/> print("Проверка...") <br/> if FAULT==number: <br/> time.sleep(3) <br/> print("Проверка завершена успешно."); <br/> time.sleep(1) <br/> if number % 2: <br/> print("У нас возникли технические проблемы.") <br/> else: <br/> print("Добро пожаловать.") <br/> else: <br/> print("Логин или пароль введены не верно");
  • 15 октября 2024 г. 17:02
Ответы на вопрос 2
В вашем коде проблема заключается в том, что условие, проверяющее делимость уникального ID на 2, находится вне нужного контекста. В вашем случае вы хотите выводить сообщение о технических проблемах только в том случае, если проверка ID прошла успешно, а сам ID не делится на 2.

Для исправления кода, нужно немного изменить структуру. Вот исправленный вариант:

```python
import random
import time

login = str(input("Введите логин: "))
password = str(input("Введите пароль: "))
print("Ваш логин:", login, "Ваш пароль:", password)

if login == "GLaDOS" and password == "tier3":
    print("Создание уникального ID")
    time.sleep(3)
    number = random.randint(20, 35)
    print("Ваш ID:", number)
    
    FAULT = int(input("Введите ваш уникальный ID: "))
    print("Проверка...")
    
    if FAULT == number:
        time.sleep(3)
        print("Проверка завершена успешно.")
        time.sleep(1)
        
        # Проверяем, делится ли number на 2
        if number % 2 == 0:
            print("Добро пожаловать.")
        else:
            print("У нас возникли технические проблемы.")
    else:
        print("Логин или пароль введены не верно")
else:
    print("Логин или пароль введены не верно")
```

### Изменения:
1. Я переместил проверку `number % 2` внутрь ветки, где `FAULT` соответствует `number`. Теперь сообщение о технических проблемах будет выводиться только если проверка ID прошла успешно, и лишь затем проверяется, делится ли ID на 2.
2. Добавил явное сравнение `if number % 2 == 0`, чтобы сделать проверку более читаемой.

Теперь программа будет выводить сообщение о технических проблемах только в том случае, если ID не делится на 2, и ID корректно совпадает с введённым значением.
В питоне любое значение отличное от 0 приведеное к типу bool - является True. 

То есть блок number % 2 всегда будет выполнятся при нечетном number

Проверьте сами:

for i in range(1, 101):
    print(i, bool(i % 2))
Похожие вопросы