2016-09-29 91 views
2

編碼非常新穎。我想通過做一個我想出來的小項目來學習自己的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循環工作正常,但它停在那裏。我不確定如果我的縮進是錯誤的,或者我使用了錯誤的命令,但任何幫助將不勝感激。

+1

double等於'=='用於檢查值。賦值是單個等於'='的。所以'x [i] == 360-x [i]'應該是'x [i] = 360-x [i]' –

+0

不要減去它,直到它低於360,使用模數運算符'%' –

+0

嘗試添加其他條件最後並在該塊中打印某些內容。我相信沒有一個條件得到滿足。 – faadi

回答

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) 
+0

謝謝,這個修正了原來的。我假設enumerate()中的v與x [i]的作用相同,並且在末尾替換了列表中的所有值? – quesadyllan

+0

沒問題。請記住,我已將最後一個從'90-v'更改爲'180-v',因爲您的請求是從180減去。 – Bharel

+0

Hi @quesadyllan,如果這個或任何答案已解決您的問題,請考慮點擊接受它複選標記。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – Bharel

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) 
+0

謝謝,這一切都檢查出來。我仍然試圖習慣自己形成邏輯,但看着這是有道理的。 – quesadyllan

+0

這行'print(180 - item):'產生無效語法 – SkyMaster

+0

oops,流浪標點符號 –

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) 

希望這有助於列表。