2017-01-08 6 views
0

私がしようとしているのは、入力nと出力aをとる数学関数を作ることです。私は大きな数字を入力し、これはwhile loopを通り、その値から1を引いてaを印刷し、特定の値nまで繰り返す。私がしたいことは、nをキーにしてaを値として辞書に入れ、それをmatplotlibでグラフ化することです。 Looking around a bit thereでは、辞書やリスト、配列だけのようには見えないので、別のキーと値のリストを作成し、それを入力してマーカーなどを変更するのが最善の方法です。ここで私が持っているコードは、これまでです:関数の値から辞書を作成し、それをグラフのために使用する

def intan(n=3): 
    a = 180 -(360/n) 
    while n >= 3: 
     print(a) 
     n -= 1 
     intan(n) 

intan(4) 
    '''Returns strange output of 90.0, 60.0, 90.0, 
    instead of just the first two''' 

あなたが見ることができるように、そこサイクル出力による複数回のコードと少し奇妙なエラーはまだですが、いくつかの工夫の後に私はいない、非常にすることができますその理由を理解してください。君たちありがとう!

更新:奇妙なエラーはStephenRauchの助言により解決されました。

+2

だから、matplotlib' '辞書をプロットする方法を、辞書を返す方法をあなたの質問であるか、なぜコードが二度90.0を返して? – Colin

+1

再帰とループが混在しています。おそらくどちらか一方をする必要があります。 –

+2

whileループの中で 'a = ...'を動かし、再帰的な 'intan(n)'呼び出しを削除します。 –

答えて

1

私はあなたが値を通過する場所から関数を分割したいと思います。 intanがちょうど180 -(360/n)を返すと想定されている場合は、それを返して、別の場所でループしてください。

import matplotlib.pyplot as plt 


def intan(n): 
    return 180 -(360./n) 

n_values = range(4, 100) 
plt.plot(n_values, list(map(intan, n_values))) 
plt.show() 

等価pandas実装

import matplotlib.pyplot as plt 
import pandas as pd 


x = pd.Series(range(4, 100)) 
y = 180 - 360/x 

plt.plot(x, y) 
plt.show() 

enter image description here

+0

ああ、私は解決策が大好きです、私はそれを過度に複雑にしているようです。しかし、私はそれを実行すると、私は得る: 'ValueError:xとyは同じ最初の次元を持つ必要があります'。 – 9voltWolfXX

+1

私はPython 3のためにそれを修正しました。 – Colin

+0

ありがとう!私はPyPlotをもっと混乱させることはかなり楽しいものになるだろうと伝えることができます! :) – 9voltWolfXX

関連する問題