如何改变函数内部的值

时间:2016-09-29 19:23:12

标签: python loops

编码很新。我想通过做一个我提出的小项目来学习自己的Python。我意识到这将是一个缓慢的过程,但我只是有一个关于循环的问题。

这就是我想要做的事情:

- 用户输入一个数字列表,如果列表中的数字超过360,该函数将从中减去360,直到它低于360.

- 一旦低于360:

  • 如果它高于270,则会从360减去该数字。
  • 如果它高于180,它将从数字中减去180.
  • 如果它高于90,则会从180减去该数字。

- 然后应该打印值。如果这个过程听起来很熟悉,我试图将方位角转换为方位角。现在我只专注于获取数值,然后我将添加方向。

这是我的代码:

    def bearing(x):
        for i in range(len(x)):
            while x[i]>=360:
                x[i]-=360
            if x[i]>270:
                x[i]==360-x[i]
            elif x[i]>180:
                x[i]-=180
            elif x[i]>90:
                x[i]==180-x[i]
        print (x)

while循环工作正常,但它停在那里。我不确定我的缩进是否错误,或者我使用了错误的命令,但我们将非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

您不必使用range(len(x))。相反,您可以明确地迭代x中的元素。

def bearing(x):
    for item in x:
        item = item % 360 #This gets the remainder of dividing item by 360
        if item > 270:
            print(360 - item)
        elif item > 180:
            print(item - 180)
        elif item > 90:
            print(180 - item)
        else:
            print(item)

答案 1 :(得分:0)

您没有使用作业(=),而是使用比较(==)。试试这个:

def bearing(x):
    for i in range(len(x)):
        while x[i]>=360:
            x[i]-=360
        if x[i]>270:
            x[i]=360-x[i]
        elif x[i]>180:
            x[i]-=180
        elif x[i]>90:
            x[i]=180-x[i]
    print (x)

您也可以将while循环缩短为单个% 360

这是一个更清洁的功能:

def bearing(x):
    for i, v in enumerate(x):
        v = v % 360
        if v > 270:
            v = 360-v
        elif v > 180:
            v -= 180
        elif v > 90:
            v = 180-v
        x[i] = v
    print (x)

答案 2 :(得分:0)

您可能熟悉或不熟悉模数运算符(%)。这样做的是从除法中返回剩余部分,无论如何这基本上是含咖啡因的减法。例如,5 % 3将从2返回5 / 3 == 1 remainder 2。希望您能看到user_input % 360如何处理您对< 360的初步减法。

将其翻译为数字列表:list_below_360 = [x % 360 for x in user_input_list]

现在,让我们假设我们已经正确格式化了用户输入,这是一个低于360的整数列表。

for i in range(len(list_below_360)):
    if list_below_360[i] > 270:
        list_below_360[i] = 360 - list_below_360[i]
        #notice the use of a single equals sign here,
        #a double equals sign does comparison, not assignment
    elif list_below_360[i] > 180:
        list_below_360[i] -= 180
    elif list_below_360[i] > 90:
        list_below_360[i] = 90 - list_below_360[i]
print(list_below_360)

希望这有帮助。