2016-10-03 2 views
1

Я пытаюсь читать с клавиатуры номер и проверить егоКак передать varibles через функции в Python

Это то, что у меня есть, но он не работает.

нет ошибок, но это не помню число я представил

def IsInteger(a): 
    try: 
     a=int(a) 
     return True 
    except ValueError: 
     return False 

def read(): 
    a=input("Nr: ") 
    while (IsInteger(a)!=True): 
     a=input("Give a number: ") 

a=0 
read() 
print(a) 
+1

'a' глобальное и' a' локальное имя в 'read()' являются * отдельными переменными *. Вы уже знаете, как использовать 'return', почему бы не использовать это в' read() '? –

+0

'return' число от' read' и переназначить 'a' на возвращаемое значение –

ответ

0

Он появляется, как будто вы не возвращает результат функции чтения().

Последняя строка вашей функции чтения должно быть «вернуть»

И тогда, когда вы вызываете функцию чтения вы бы сказать «а = чтение()»

1

a является локальной переменной в две функции и не видны остальной части вашего кода, как есть. Лучший способ исправить ваш код - вернуть a из вашей функции read(). Кроме того, интервал отключен в вашей функции IsInteger().

+1

Лучшим способом написать эту строку' while' является 'while not IsInteger (a)'. Как правило, лучше избегать явного тестирования против «True» или «False». См. [Рекомендации по программированию PEP-0008] (https://www.python.org/dev/peps/pep-0008/#programming-recommendations), «Не сравнивать логические значения с True или False с помощью ==». Кроме того, в блоке 'try' вам не нужно выполнять это назначение,' int (b) 'сам по себе будет работать нормально; OTOH, я думаю, это может немного озадачить некоторых читателей. :) –

+0

@ PM2Ring Хорошие баллы. Я редактировал в решении 'while not IsInteger (a)'. –

1

Я думаю, что это то, чего вы пытаетесь достичь.

def IsInteger(a): 
    try: 
     a=int(a) 
     return True 
    except ValueError: 
     return False 

def read(): 
    global a 
    a=input("Nr: ") 
    while (IsInteger(a)!=True): 
     a=input("Give a number: ") 

a=0 
read() 
print(a) 

Вы должны использовать global выражение для того, чтобы перезаписать глобальные переменные без необходимости создания return внутри функции и набрав a = read().

Но я бы высоко рекомендуют U для использованияreturn и повторно присваивается значение «а», а кто-то указано ниже.

+1

Хотя это будет работать, использование глобальных переменных обычно считается плохим решением в Python. –

+0

Я знаю. Вот почему я просто добавил свое мнение, что он должен использовать переназначение с помощью 'return'. – Nf4r

Смежные вопросы