Основная проблема здесь в том, что имя val
используется для разных целей.
Сначала у вас есть функция с именем val
:
def val():
За пределами функции имя val
всегда ссылается на этот функциональный объект .Объект функции не равен ни одному целому числу, поэтому любое сравнение с любым целым числом всегда будет возвращать False
.
Внутри функции вы создаете новое локальное имя val
:
val = int(input("Ange ditt val (1, 2 eller 3): ") )
Это имя local для функции и исчезнет, когда функция завершится.Мы говорим, что он имеет локальную область действия .Фактически, каждый оператор присваивания (каждый оператор, использующий оператор присваивания =
) всегда будет присваивать имя в текущей области видимости, а не во внешней области, если только ключевые слова nonlocal
или global
не являютсяused.
Вы могли бы переназначить глобальное имя val
из функции val
с помощью объявления global val
- но если вы сделали это, то вы не могли быбольше не используйте имя val
для ссылки на функцию.Точно так же вы можете переназначить глобальное имя val
вне функции:
val = val()
Но, опять же, это можно сделать только один раз , поскольку впоследствии val
не будетбольше относится к функции объекта.(Кроме того, это может затруднить чтение и понимание программы.)
Вероятно, лучше всего использовать два разных имени для этих двух разных вещей.
Как правило, это лучшая практиканазвать функцию с помощью глагола или фразы глагола, например:
def get_value():
И затем вы можете использовать существительное или словосочетание для возвращаемого значения:
value = get_value()
if value == 1:
...