質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1371閲覧

(Python) Turtle methods. アメリカの大学の課題 分かる方よろしくお願いします。

needhelpman

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/15 11:48

編集2020/10/16 03:23

前提・実現したいこと

サークルの位置。向きの修正。

課題内容(英語ですみません)
Define a function drawCircle. This function should expect a Turtle object, the coordinates of the circle’s center point, and the circle’s radius as arguments. The function should draw the specified circle. The algorithm should draw the circle’s circumference by turning 3 degrees and moving a given distance 120 times. Calculate the distance moved with the formula 2.0 × π × radius ÷ 120.0.

Define a function main that will draw a circle with the following parameters when the program is run:

X = 50
Y = 75
Radius = 100# Import the turtle to draw the circle.

私が書いたコード:

# Import the turtle to draw the circle. # Import the math to use pi. import turtle import math # Define the function. def drawCircle(turtleObj, x, y, radius): # Evaluate the distance. dist = 2.0*math.pi*radius /120.0 # Move the tutle pointer to # x and y coordinates. turtleObj.penup() turtleObj.setposition(x, y) # Draw the circle using turtle object. turtleObj.pendown() # Iterate from 0 to 120. for k in range(0, 120): turtleObj.fd(dist) # Turn by 3 degree for each iteration. turtleObj.right(3) # Define the main function. def main(): # Set the x and y coordinates. x = 50 y = 75 # Set the radius. radius = 100 # Create the turtle object. turtleObj = turtle.Turtle() # Call the function to draw the circle. drawCircle(turtleObj, x, y, radius) if __name__ == '__main__': # Call the main function. main() turtle.mainloop()

発生している問題・エラーメッセージ

円の位置と、サークルが始まり、終る位置が正しくないようです。
こちらが正答です。

引用テキスト

こちらが私のコードのresultです。
イメージ説明
こちらが正答と私のコードの誤差です。
イメージ説明
よろしくお願いします。
イメージ説明
イメージ説明

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/10/15 11:51

コードは「コードの挿入」で記入してください。
takutakuya

2020/10/15 11:52

コードは「コードの挿入」を使ってください。 コメント文が見出しになってしまって、非常に見づらいです。
needhelpman

2020/10/15 11:59

しつれいしました。修正しましたのでよろしくお願いします。
guest

回答3

0

向きについて、補足情報です。


矢印の向きの初期値は、 mode により決まります。

モードタートルの向きの初期値正の角度
"standard"右 (東) 向き反時計回り
"logo"上 (北) 向き時計回り

turtle モジュールは turtle.cfg という設定ファイルを読み込むようになっていて、
このモードの値を設定することが出来ます。

矢印を回転させて正答と同じ向きに合わせる場合、
想定するモードが異なると、初期の矢印の向きが意図通りになりません。
プログラム内で mode を明示することで、設定ファイルの影響を回避できます。

投稿2020/10/15 15:17

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

needhelpman

2020/10/15 15:44

回答ありがとうございます。 import turtle turtle.mode("standard") import math のように変更してみたのですが正常に動作しません。
teamikl

2020/10/15 21:53

矢印の向きの初期値を確認しましょう。 上記のモード設定は、設定ファイルの影響を受けないようにするものです。 その後に必要に応じて角度を決めてください。
guest

0

正答との差分を見ると次の変更が必要でしょう。

turtleObj.setposition(x, y) turtleObj.left(90) # 追加 方向は上方向 #turtleObj.right(3) # 削除 turtleObj.left(3) # 追加 左回り #x = 50 x = 100 # 最初の位置 追記

投稿2020/10/15 14:02

編集2020/10/15 14:05
lehshell

総合スコア1147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

X = 50

Y = 75

上記が円の中心と定義されているので、この座標を通ってはダメです。
開始点は半径分移動する必要があります。

※どこを開始点にするかと進行方向は問題文には定義されていないようなので任意で良いのではないでしょうか?

Python

1import turtle 2import math 3 4x = 50 5y = 75 6radius = 100 7dist = 2.0*math.pi*radius /120.0 8 9t = turtle.Turtle() 10 11t.penup() 12t.setposition(x, y) 13t.pendown() 14t.circle(1) # 円中心の確認の為に目印を付ける 15 16t.penup() 17t.forward(radius) 18t.right(90) 19t.pendown() 20 21for i in range(0, 120): 22 t.fd(dist) 23 t.right(3)

【追記】
下記ではどうでしょうか?

Python

1import turtle 2import math 3 4x = 50 5y = 75 6radius = 100 7dist = 2.0*math.pi*radius /120.0 8 9t = turtle.Turtle() 10 11t.penup() 12t.setposition(x, y) 13t.pendown() 14 15t.penup() 16t.forward(radius) 17t.left(90) 18t.pendown() 19 20for i in range(0, 120): 21 t.fd(dist) 22 t.left(3)

【追記】
下記部分を修正しました。

python

1for i in range(0, 120): 2 t.left(3) 3 t.fd(dist)

投稿2020/10/15 13:18

編集2020/10/16 05:27
meg_

総合スコア10577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

needhelpman

2020/10/15 13:35

回答ありがとうございます。 問題文には記載されていませんが上記の正答どうりにならないと不正解になってしまう仕様のようです(教授のミスだと思われます)。めぐさんの回答で0.01percent不一致という結果でした。どうやら進行方向も合わせなければならないようです。backwardに変更した場合のコードもご教授できないでしょうか。よろしくお願いします。
meg_

2020/10/15 13:44

そこはご自身で考えられた方が良いのでは?
meg_

2020/10/15 13:46

確認ですが、下記コードは除いてますよね? > t.circle(1) # 円中心の確認の為に目印を付ける
needhelpman

2020/10/15 14:38

はい。そのコードは削除しています。
needhelpman

2020/10/15 14:52

何度試しても進行方向を合わせようとするとサークルの位置が動いてしまいます。
needhelpman

2020/10/16 03:17

何度もありがとうございます。そちらは私も昨夜試してみました。結果は0.1percent differenceでした。結果の画像をアップロードしました。
needhelpman

2020/10/16 05:37

正答と一致しました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問