簡體   English   中英

學習在Python類中定義函數並混淆我的代碼輸出

[英]Learning about defining functions in my Python class and confused about the output of my code

問題:編寫一個Python函數square,它接受一個數字並返回該數字的平方。

此函數接收一個數字並返回一個數字。

代碼給出:

def square(x):
    '''
    x: int or float.
    '''

我的代碼:

def square(x):
    '''
    x: int or float.
    '''
    x = x * x
    print x

輸出:

Test: square(-5.0)
Your output:
25.0
None

Correct output:
25.0


Test: square(3.17)
Your output:
10.0489
None

Correct output:
10.0489

Test: square(-3.4)
Your output:
11.56
None

Correct output:
11.559999999999999

為什么我的代碼打印出來(a)“無”,在某些情況下(b)錯誤答案?

如果未從函數返回任何值,則默認情況下將返回None

因此,如果您嘗試打印函數的返回值,則將獲得None 因此,只是不打印函數調用的結果。

您可以更改函數以返回計算的正方形而不是打印它:

def square(x):
    '''
    x: int or float.
    '''
    return x * x

你得到的是None因為你正在調用你的函數:

print square(3.17)

換句話說,您正在打印函數的返回值。 但是這個功能不會返回任何東西; 換句話說,它返回None

因為它已經打印了結果,所以沒有理由以這種方式調用該函數。 簡單地稱之為:

square(3.17)

或者更改功能,使其返回結果而不是打印結果。 (這可能是更好的方法,因為它使函數更普遍有用 - 畢竟有時你可能不想打印結果。)

對於不正確的答案,二進制浮點數學不能完美地表示所有小數。 十進制中看起來有限的數字可能具有無限的二進制表示; 例如, 3.4就是這樣的一個。 因此,根據定義,所有有限表示都是近似值,並且數學運算通常會給出稍微“關閉”的結果。 Python會在打印您的數字時嘗試隱藏這些差異,但它並不總是這樣做。 解決方案是使用Decimal類(在decimal模塊中)來表示您的數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM