2016-09-29 25 views
2

コーディングが新しくなりました。私は思いついた小さなプロジェクトをやって自分自身でPythonを学ぼうとしています。私はこれが遅いプロセスであることを認識していますが、私はちょうどループについての質問がありました。関数内の値を変更する方法

これは私がやろうとしているものです:

-Theユーザーは番号のリストを入力し、リスト内の数字は360以上であれば、それは以下になるまで、関数はそれから360を減算します360

それは360より下だ-once:

  • それは270より上の場合は、それは180より上の場合は、それは番号から180を減算します360
  • から数値を減算します。
  • それは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

二重の '=='は値をチェックするためのものです。代入は単一の等号 '='です。したがって、x^[i] == 360-x [i]は 'x [i] = 360-x [i]'でなければなりません。 –

+0

360未満になるまで減算する代わりに、モジュラス演算子 '%'を使用してください。 –

+0

そうでなければ、最後に条件を付けて、そのブロックに何かを印刷します。私は条件のどれも満足していないと信じています。 – faadi

答えて

0

代わりの割り当て(=)を使用して、あなたは比較(==)を使用しています。これを試してください:あなたはまた、単一% 360にwhileループを短くすることが

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) 

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

正確に。あなたの要求が180から引き離されたので、私は最後のものを '90-v'から' 180-v'に変更しました。 – Bharel

+0

こんにちは@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、stray punctuation –

0

注またはモジュラス演算子(%)に精通していてもいなくてもよい。

これは同じことを行いクリーナー機能です。とにかくカフェインされた減算である除算から残りを返します。たとえば、5 % 3はから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) 

希望以下の整数のリストであるユーザ入力をフォーマットしたと仮定しましょう。

関連する問題