编码很新。我想通过做一个我提出的小项目来学习自己的Python。我意识到这将是一个缓慢的过程,但我只是有一个关于循环的问题。
这就是我想要做的事情:
- 用户输入一个数字列表,如果列表中的数字超过360,该函数将从中减去360,直到它低于360.
- 一旦低于360:
- 然后应该打印值。如果这个过程听起来很熟悉,我试图将方位角转换为方位角。现在我只专注于获取数值,然后我将添加方向。
这是我的代码:
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循环工作正常,但它停在那里。我不确定我的缩进是否错误,或者我使用了错误的命令,但我们将非常感谢任何帮助。
答案 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)
希望这有帮助。