Python 3.4 - 在函数下循环

时间:2018-01-07 10:54:13

标签: python python-3.x loops

我对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)

但是从这段代码中,我仍然无法生成数组/平方数列表。任何建议都非常感谢。

3 个答案:

答案 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 .. .....]

您的代码很棒,但代码中的错误很少,而且非常小。

  1. 在for循环之前初始化空列表,以便在每次迭代中存储所有正方形。

  2. math.ceiling(yourNumber)本身给出了一个最小的整数值,因此不需要math.ceiling(yourNumber ** 0.5),它给出了给定的平方根正常数字,同样 math.floor(yourNumber)给出最大的整数值,你的逻辑给出的是给定数字的直接平方根,这是你的逻辑大多出错的地方。

    < / LI>
  3. 您正在返回答案,这是错误的,您的程序控件在解决第一个元素后立即退出循环。与你的程序相关的其他事情是,你将return语句放在if条件的else部分,这是for循环的一部分,这也是一个错误。因此,删除您的返回应答语句,并在for循环中添加if条件的 yourList.append(answer)

  4. 在for循环后放置您的返回并返回您的列表,而不是回答。因此,在完成计算逻辑后,该程序返回一个正方形列表。

  5. 最终代码如下所示

    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行,这是不必要的。

    希望这就是你要找的东西。快乐的编码:)