2017-07-29 9 views
2

以下は黄色の家を描くための私のカメプログラムです。私は、亀のプログラムを短くするために、forループを作成する方法を理解できません。誰かが下のプログラムのループを作成する方法についての任意のアイデアを持っていますか?ここ家のためのPythonカメプログラムを短縮する

import turtle 
import math 
def yellowHouse() : 
    wn=turtle.Screen() 
    wn.title("Yellow House") 
    wn.bgcolor("Blue") 
    #sideLength = 200 
    house=turtle.Turtle() 
    Diagonal_length= 0.5*math.sqrt(2 *(200 ** 2)) 
    house.pensize(5) 
    house.speed(4.6) 
    house.color("Yellow") 
    house.left(90) 
    house.forward(200) 
    house.right (135) 
    house.forward(Diagonal_length) 
    house.right(90) 
    house.forward(Diagonal_length) 
    house.left(135) 
    house.forward(200) 
    house.left(135) 
    house.forward(Diagonal_length) 
    house.right(90) 
    house.forward(Diagonal_length) 
    house.left(135) 
    house.forward(200) 
    house.right(135) 
    house.forward(Diagonal_length) 
    house.right(90) 
    house.forward(Diagonal_length) 
    house.right(45) 
    house.forward(200) 
    house.left(90) 
    wn.mainloop() 
yellowHouse() 

答えて

0

がforloopとあなたのコードで、あなただけのイベントとイベント値のインデックスを維持する必要が..

import turtle 
import math 
def yellowHouse() : 
    wn=turtle.Screen() 
    wn.title("Yellow House") 
    wn.bgcolor("Blue") 
    #sideLength = 200 
    house=turtle.Turtle() 
    Diagonal_length= 0.5*math.sqrt(2 *(200 ** 2)) 
    event = ["pensize","speed","color","left","forward","right","forward","right","forward","left","forward","left","forward","right","forward","left","forward","right","forward","right","forward","right","forward","left"] 
    event_val = [5,4.6,"Yellow",90,200,135,Diagonal_length,90,Diagonal_length,135,200,135,Diagonal_length,90,Diagonal_length,135,200,135,Diagonal_length,90,Diagonal_length,45,200,90] 
    event_zip = zip(event, event_val) 
    for i,j in event_zip: 
    if type(j).__name__ == "str": 
     eval("house.{}('{}')".format(i,j)) 
    else: 
     eval("house.{}({})".format(i,j)) 
yellowHouse() 
+0

サイドノート: 'enumerate'とインデックスの代わりに' zip(event、event_val) 'を使うことができます。 – nutmeg64

+0

はい私は忘れました..あなたのリマインダーに感謝します –

+0

彼のプログラムを短くするという意味では、このソリューションは実際にはOPのオリジナルコードよりも文字通り長くなっています。 'eval'を追加する - 本当ですか?あなたはデフォルトのカメを使用し、あなたのリスト 'event = [pensize、speed、color、...]'を構築し、 'eval'をスキップして単純に引数に関数を適用することができました:' i(j) ' – cdlane

0

あなたが繰り返さつの形状のうちの家を構築しているので、私は選ぶだろうオーバースタンピングためを描く:

from turtle import Turtle, Screen 

def yellowHouse(side_length): 
    wn.register_shape("brick", ((0, 0), (-0.5, -0.5), (0.5, -0.5))) 
    house = Turtle('brick', visible=False) 
    house.shapesize(stretch_wid=side_length, outline=5) 
    house.color("yellow", wn.bgcolor()) 
    house.penup() 

    for angle in range(360, 0, -90): 
     house.setheading(angle) 
     house.stamp() 

    house.forward(side_length) 
    house.stamp() 

wn = Screen() 
wn.title("Yellow House") 
wn.bgcolor("blue") 

yellowHouse(200) 

wn.exitonclick() 

このソリューションはがれの中心部に家を印刷しますn。あなたはあなたが望む家の大きさを渡します。 (それは約1/3少ないコードです)

関連する問題