2016-10-03 27 views
1

我想從鍵盤讀取一個數字並驗證它我如何通過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

''''''''''''''''''''''''''''''''''''''read'你似乎已經知道如何使用'return',爲什麼不在'read()'中使用它呢? –

+0

從'read'返回數字並將'a'重新賦值給返回的值 –

回答

0

看來好像你不返回read()函數的結果。

你讀功能的最後一行應該是「返回」

然後當你調用read函數,你會說:「一個=閱讀()」

1

a是一個局部變量的兩個函數,並且不會像其他代碼那樣可見。修復代碼的最佳方法是從read()函數返回a。此外,您的IsInteger()功能中的間距關閉。

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

def read(): 
    a=input("Nr: ") 
    while not IsInteger(a): 
     a=input("Give a number: ") 
    return a 

c = read() 
print(c) 
+1

寫'while'行不是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 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,並重新分配「A」的值,如下面的人說。

+1

儘管這會起作用,但使用全局變量在Python中通常被認爲是一個糟糕的解決方案。 –

+0

我知道。這就是爲什麼我只是添加我的意見,他應該使用'return'重新分配的方式。 – Nf4r

相關問題