Найти - Пользователи
Полная версия: Непонятная
Начало » Python для новичков » Непонятная
1 2
Tucha
При вводе пользователем ПРАВИЛЬНОГО порядкового номера (1,2,3,4) блок отрабатывает как надо ссылаясь на условие if attr_choice == “1” or “2” or “3” or “4”:, так же он отрабатывает правильно, если ввести всё что угодно ссылаясь на условие else: wrong_attr_choice_f(), НО если ввести 0, программа опять отрабатывает условие if attr_choice == “1” or “2” or “3” or “4”: и я не могу понять, почему
объясните плз

print("\nУ вас", points, "нераспределённых очков характеристик.")
    attr_choice = input("\nВведите порядковый номер характеристики которую хотите изменить ? ")
    try:
        if attr_choice == "1" or "2" or "3" or "4":
            char = attributes[int(attr_choice)-1][1]
            print("\nУвеличить характеристику", char, " --- +",
                  "\nУменьшить характеристику", char, " --- -",
                  "\nВыйти в преведущее меню            --- 0")
            choice = input()
            if choice == "+":
                points -= 1
                attributes[int(attr_choice)-1][2] += 1
            elif choice == "-":
                points += 1
                attributes[int(attr_choice)-1][2] -= 1
        else:
            wrong_attr_choice_f()
    except IndexError as err:
        wrong_attr_choice_f()
    except ValueError as err:
        wrong_attr_choice_f()
Shaman
Tucha
attr_choice == “1” or “2” or “3” or “4”
Тут сначала вычисляется == а уже затем or. Вам скорее всего другого хотелось.
Напишите
attr_choice in "1234"
Tucha
Shaman
Тут сначала вычисляется == а уже затем or. Вам скорее всего другого хотелось.
Напишите
attr_choice in “1234”

Спасибо за решение, правда, но я хотел больше получить объяснение, почему при назначении переменной attr_choice значения “0”, отрабатывает if, а не else.
Shaman
Запустите “0” == “1” or “2” or “3” or “4” в IDLE, а затем еще раз прочитайте написанное мной выше.
FishHook
Tucha
Вообще, глупо работать с числами как со строками. Вам же в любом случае придется проверять, что пользователь ввел число, а не абракадабру
attr_choice = input("\nВведите порядковый номер характеристики которую хотите изменить ? ")
attr_choice = int(attr_choice)
if  1 <= attr_choice <= 4:
   .....
Tucha
Вы все, предлагаете мне решения и за это конечно спасибо, но я хотел просто что бы мне объяснили как читается строка c or, and и ==, как человеку взявшему в руки первую книгу по программированию два дня назад (кем я и являюсь).

а, всё.. понял
видать не проснулся ещё
Shaman
Tucha
первую книгу по программированию два дня назад
Или это неправильная книга, или Вы забежали вперед. Чему равно “2” or “3” можете сказать?
Tucha

Shaman
Или это непрвавильная книга, или Вы забежали вперед. Чему равно “2” or “3” можете сказать?
2 или true (если в булевом значение)
Книга хорошая и я вперёд не забежал, просто я немного туповат получается. Надо ещё раз перечитать главу с логическими операторами.
Shaman
Tucha
2 или true (если в булевом значение)
А
2 == "2"
чему?
Tucha
Я могу только предположить, что значение 2 это int а значение “2” это str и они не могут быть равны. Наверное будет false
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB