亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

完全平方函數

完全平方函數

達令說 2022-12-27 17:22:03
如果數字是一個完美的正方形,我正在嘗試制作一個說“是”的函數。以下是代碼,考慮到我是初學者,請建議我需要進行的更改。def perfsq(x):    if s == (math.sqrt(x)) and s * s == x:        print('yes')
查看完整描述

5 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

示例 1:


import math


def perfsq(x):

    if math.sqrt(x)%1 == 0:

        print('yes')

    else:

        print('no')

調用你的函數:


perfsq(16)

示例 2:


x = 16


print('yes') if math.sqrt(x)%1 == 0 else print('no')


查看完整回答
反對 回復 2022-12-27
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

我希望這可以幫助:


import math


number = int(input("Enter the Number"))


root = math.sqrt(number)


if int(root + 0.5) ** 2 == number:

    print("YES")

else:

    print("NO")


查看完整回答
反對 回復 2022-12-27
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

您的函數有錯誤,因為s未定義。您的代碼應如下所示 -


def perfsq(x):

    s = math.sqrt(x)          # You didn't define s in your code

    if s == (math.floor(s)):  # Just check if square root is an integer

        print('yes')

        return True

    else :

        print('No')

        return False


查看完整回答
反對 回復 2022-12-27
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

你似乎有兩個主要的誤解:

  1. ==用于比較對象,而不是賦值。我相信您打算分配smath.sqrt(x)這是由s = math.sqrt(x).

  2. 即使進行了上述更改,您也不能將該賦值放在if語句中。if條件可以包含表達式,而不是語句。賦值是語句。


要解決這個問題,您需要做的就是首先單獨分配s

import math


def perfsq(x):

    s = math.sqrt(x) 

    if s * s == x:

        print('yes')

現在你的問題是你變得依賴float precision。sqrt返回一個浮點數,因此對浮點數進行操作(例如s * s)是有風險的。舉個例子,使用上面的函數,運行perfsq(35)實際上會打印'yes'!!!


為了避免這些精度問題,首先檢查數字的平方根是否為 int 就足夠了。所以你的代碼可以大大簡化為:


import math


def perfsq(x):

    if math.sqrt(x).is_integer():

        print('yes')

這是使用該float.is_integer()方法,基于math.sqrt總是返回一個浮點數的事實。



查看完整回答
反對 回復 2022-12-27
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

考慮這個


def perfsq(x):

    s = math.sqrt(x)

    p = int(s)

    return p==s


查看完整回答
反對 回復 2022-12-27
  • 5 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號