Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 12, 2015 11:24:22

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная

При вводе пользователем ПРАВИЛЬНОГО порядкового номера (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()

Отредактировано Tucha (Сен. 12, 2015 11:26:01)

Офлайн

#2 Сен. 12, 2015 11:36:29

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Непонятная

Tucha
attr_choice == “1” or “2” or “3” or “4”
Тут сначала вычисляется == а уже затем or. Вам скорее всего другого хотелось.
Напишите
attr_choice in "1234"

Офлайн

#3 Сен. 12, 2015 11:52:33

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная

Shaman
Тут сначала вычисляется == а уже затем or. Вам скорее всего другого хотелось.
Напишите
attr_choice in “1234”

Спасибо за решение, правда, но я хотел больше получить объяснение, почему при назначении переменной attr_choice значения “0”, отрабатывает if, а не else.

Отредактировано Tucha (Сен. 12, 2015 11:53:00)

Офлайн

#4 Сен. 12, 2015 11:58:26

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Непонятная

Запустите “0” == “1” or “2” or “3” or “4” в IDLE, а затем еще раз прочитайте написанное мной выше.

Офлайн

#5 Сен. 12, 2015 12:05:53

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Непонятная

Tucha
Вообще, глупо работать с числами как со строками. Вам же в любом случае придется проверять, что пользователь ввел число, а не абракадабру

attr_choice = input("\nВведите порядковый номер характеристики которую хотите изменить ? ")
attr_choice = int(attr_choice)
if  1 <= attr_choice <= 4:
   .....



Офлайн

#6 Сен. 12, 2015 12:28:38

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная

Вы все, предлагаете мне решения и за это конечно спасибо, но я хотел просто что бы мне объяснили как читается строка c or, and и ==, как человеку взявшему в руки первую книгу по программированию два дня назад (кем я и являюсь).

а, всё.. понял
видать не проснулся ещё

Отредактировано Tucha (Сен. 12, 2015 12:34:52)

Офлайн

#7 Сен. 12, 2015 12:38:26

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Непонятная

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

Отредактировано Shaman (Сен. 12, 2015 12:46:28)

Офлайн

#8 Сен. 12, 2015 12:49:10

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная


Shaman
Или это непрвавильная книга, или Вы забежали вперед. Чему равно “2” or “3” можете сказать?
2 или true (если в булевом значение)
Книга хорошая и я вперёд не забежал, просто я немного туповат получается. Надо ещё раз перечитать главу с логическими операторами.

Офлайн

#9 Сен. 12, 2015 12:56:07

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Непонятная

Tucha
2 или true (если в булевом значение)
А
2 == "2"
чему?

Офлайн

#10 Сен. 12, 2015 12:59:23

Tucha
Зарегистрирован: 2015-09-12
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная

Я могу только предположить, что значение 2 это int а значение “2” это str и они не могут быть равны. Наверное будет false

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version