私はプログラミング初心者です。  
Pythonで五角星を関数機能で作成したいのですが、上手くいきません…  
分かる方、いらっしゃいませんか？  
助言をお願いします。

```

    import turtle 
    
    star = turtle.Turtle()
    
    def star(turtle, n = 5, d):
        angle = (180-((180*(n-2))/n))*2
        for i in range(n):
            t.forward(d)
            t.left(angle)
        return angle
    
    turtle.done()
    
```
CC BY-SA 4.0
2018-09-01T07:35:44.307
48005
2018-09-01T22:57:36.297
2018-09-01T07:40:47.743
3060
29947
question
python
Pythonで五角星を関数機能で作成したいのですが、上手くいきません…
コードにいくらか問題があります。

  * 変数名、モジュール名、関数名に重複があります。「モジュールturtleと引数名turtle」などです。
  * tが未定義です。最初の文を`import turtle as t`にするとうまくいきます。
  * angle(角度)は五角星なので144度x5回固定がいいです。
  * 関数starの引数の「turtle」「n」は不要です。
  * 亀を定義しなくても、Turtleのコードは動きます。
  * 定義した関数が動いていません。動かすようコードを書いてください。

完成形は下です。  
import turtle as t

```

    def star(length):
        t.pd()
        for i in range(5):
            t.fd(length)
            t.lt(144)
        t.pu()
    
    if __name__=="__main__":
        star(150)
    
```
CC BY-SA 4.0
2018-09-01T10:30:45.827
48006
2018-09-01T10:30:45.827
29212
48005
answer
まず、タートルグラフィックを元々の`logo`という言語での書き方に近い方法で書いてみます。プログラミングが始めてであれば、こちらの方法で書いてプログラミングに慣れていくのがいいかもしれません。

```

    from turtle import *
    
    def star(d):
        n = 5
        angle = (180-((180*(n-2))/n))*2
        for i in range(n):
            forward(d)
            left(angle)
    
    star(100)
    done()
    
```

質問にあるコードは、オブジェクト指向の書き方です。この場合には、タートルを`turtle.Turtle()`で作って変数に代入して名前を付けます。そこで変数の名前に関数と同じ名前の`star`を付けるのはよくありません。人間でも同性同名の人がいるとややこしい事になるので他と区別できる名前を付けましょう。詳しくは、公式チュートリアルの[クラスのページ](https://docs.python.org/ja/3.7/tutorial/classes.html)をみてください。

```

    import turtle 
    tom = turtle.Turtle()
    
```

名前のついたタートルを作った場合は、関数`star`にその変数を渡してやらないと関数側ではわからないので、それに対応する仮引数が必要になります。また、仮引数で`n
=
5`は、デフォルトの値を指定した引数なので呼び出す時に省略可能です。それで、それで普通の仮引数よりも後ろにおく必要があります。詳しくは、公式チュートリアルの[関数を定義する](https://docs.python.org/ja/3.7/tutorial/controlflow.html#defining-
functions)をみてください。

```

    def star(t, d, n=5): 
    
```

以上を参考にしてもらって、質問がPythonで五角星を関数機能で作成したいという要望なので、そのコードを書くと以下のようになります。

```

    import turtle
    
    def star(t, d, n=5):
        angle = (180-((180*(n-2))/n))*2
        for i in range(n):
            t.forward(d)
            t.left(angle)
    
    tom = turtle.Turtle()
    star(tom, 100)
    turtle.done()   
    
```
CC BY-SA 4.0
2018-09-01T22:57:36.297
48015
2018-09-01T22:57:36.297
15171
48005
answer