我对Python很陌生,希望您就此提出建议。我想创建一个方数的数组(即1,4,9,16,25等)
这是我目前的代码:
def near(limit):
for element in limit:
answer = 0
rounding1 = math.ceil(element ** 0.5)
rounding2 = math.floor(element ** 0.5)
result1 = rounding1 ** 2
result2 = rounding2 ** 2
lambda1 = abs(result1 - element)
lambda2 = abs(result2 - element)
if lambda1 < lambda2:
answer = result1
else:
answer = result2
return answer
listing = list(range(1,2000))
nearing = near(listing)
但是从这段代码中,我仍然无法生成数组/平方数列表。任何建议都非常感谢。
答案 0 :(得分:0)
问题是,在你的第一个循环中,你返回一个Item(回答),这样你的near
函数只计算limit
参数中的第一个项,其余的被忽略
你可以创建一个temp_list,然后简单地(在for循环外面)返回临时列表
def near(limit):
temp_list = []
for element in limit:
...
# instead of return write
temp_list.append(element)
return temp_list
答案 1 :(得分:0)
这一个:
def near(limit):
squares = []
for element in limit:
squares.append(element*element)
return squares
listing = list(range(0,10))
nearing = near(listing)
print(nearing)
回馈:
/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/michael/PycharmProjects/atm-zeiterfassung/test.py
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Process finished with exit code 0
HTH?
答案 2 :(得分:0)
有两种方法可以解决这个问题。
<强> 1。使用地图概念
由于您是python的新手,请浏览Map,Filter和Reduce概念。它们为某些类型的问题提供了最简单的一线解决方案。
现在,我们假设您正在寻找给定输入列表的正方形列表,即
输入= [1,2,3,4 ....] 输出= [1,4,9,16 ....]
您可以通过在代码中添加以下行来完成此操作
mySquaresList = list(map(lambda x:x ** 2,range(1,2000)))
<强> 2。你的方法
我猜你编写程序的方式,你可能正在寻找输入列表[34.5,45.6,48 .......]的平方并期望输出[1156.0,2025.0,2304.0 .. .....]
您的代码很棒,但代码中的错误很少,而且非常小。
在for循环之前初始化空列表,以便在每次迭代中存储所有正方形。
math.ceiling(yourNumber)本身给出了一个最小的整数值,因此不需要math.ceiling(yourNumber ** 0.5),它给出了给定的平方根正常数字,同样 math.floor(yourNumber)给出最大的整数值,你的逻辑给出的是给定数字的直接平方根,这是你的逻辑大多出错的地方。
< / LI>您正在返回答案,这是错误的,您的程序控件在解决第一个元素后立即退出循环。与你的程序相关的其他事情是,你将return语句放在if条件的else部分,这是for循环的一部分,这也是一个错误。因此,删除您的返回应答语句,并在for循环中添加if条件的 yourList.append(answer)。
在for循环后放置您的返回并返回您的列表,而不是回答。因此,在完成计算逻辑后,该程序返回一个正方形列表。
最终代码如下所示
def near(limit):
mySquares = list()
for element in limit:
answer = 0
rounding1 = math.ceil(element)
rounding2 = math.floor(element)
result1 = rounding1 ** 2
result2 = rounding2 ** 2
lambda1 = abs(result1 - element)
lambda2 = abs(result2 - element)
if lambda1 < lambda2:
answer = result1
else:
answer = result2
mySquares.append(answer)
return mySquares
listing = [34.5, 45.6, 48]
nearing = near(listing)
你可以删除你的答案= 0行,这是不必要的。
希望这就是你要找的东西。快乐的编码:)