2017-05-16 95 views
0
import turtle as t 
from turtle import * 
from math import sin, pi, sqrt 
setup(500, 500) 
Screen() 
title("Turtle Art") 
showturtle() 
screen = Screen() 
yertle = Turtle() 

turn = 90 
speed = 10 
moves = [] 

def k1(): 
    t.forward(speed) 
    moves.append(1) 

def k2(): 
    t.left(turn) 
    moves.append(2) 

def k3(): 
    t.right(turn) 
    moves.append(3) 

def k4(): 
    t.backward(speed) 
    moves.append(4) 

def k102(): 
    if input("Would you like to save this? (y/n) ") == "y": 
     name = input("What would you like to call your masterpiece? ") 
     my_file = open("./%s" % (name), "w") 
     global moves 
     moves = str(moves) 
     my_file.write(moves) 
     my_file.close() 
     print("It has been saved as:", name) 
    else: 
     t.clear 

t.onkey(k1, "Up") #move forwards 
t.onkey(k2, "Left") #turn left 
t.onkey(k3, "Right") #turn right 
t.onkey(k4, "Down") # move backwards 

t.onkey(k102, "p") #save page 

listen() 
mainloop() 

這將其保存爲當前文件夾中的文本文件中的列表(看起來像這樣:[1,1,2,1,3,3 ,1])。我想知道如何通過移動根據1,2,3或4來讓龜重現這一點。有什麼方法可以輕鬆地從文本文件中讀取嗎?如何讓蟒蛇根據文本文件移動

回答

0

加載喚起幾個問題,「你想能夠加載在現有的圖紙,以增加嗎?」,「你想給用戶有機會加載另一個之前保存當前的圖形?」,「在加載之前是否應清除圖紙?「。下面的解決方案試圖讓所有這些可能性,讓用戶保存在另一個之上,可以保存爲一個更加複雜的圖紙清晰和/或負載一張圖紙:

from turtle import Turtle, Screen 

ANGLE = 90 
DISTANCE = 10 

def k1(): 
    yertle.forward(DISTANCE) 
    moves.append(1) 

def k2(): 
    yertle.left(ANGLE) 
    moves.append(2) 

def k3(): 
    yertle.right(ANGLE) 
    moves.append(3) 

def k4(): 
    yertle.backward(DISTANCE) 
    moves.append(4) 

COMMANDS = {1: k1, 2: k2, 3: k3, 4: k4} 

def save(): 
    if moves and input('Would you like to save this drawing? (y/n) ').lower().startswith('y'): 
     name = input('What would you like to call your drawing? ') 

     with open(name, 'w') as my_file: 
        print(*moves, sep=', ', file=my_file) 

     print('Drawing has been saved as:', name) 

def clear(): 
    global moves 

    save() 

    if moves and input('Would you like to erase this drawing? (y/n) ').lower().startswith('y'): 
     moves = [] 
     yertle.reset() 

def load(): 
    clear() 

    if input('Would you like to load a drawing? (y/n) ').lower().startswith('y'): 
     name = input('What would drawing would you like to load? ') 

     with open(name) as my_file: 
      commands = [int(digit) for digit in my_file.readline().split(',')] 

     for command in commands: 
      if command in COMMANDS: 
       COMMANDS[command]() 

     print('Drawing has been loaded from:', name) 


screen = Screen() 
screen.setup(500, 500) 
screen.title('Turtle Art') 

moves = [] 

yertle = Turtle('turtle') 

screen.onkey(k1, 'Up') # move forwards 
screen.onkey(k2, 'Left') # turn left 
screen.onkey(k3, 'Right') # turn right 
screen.onkey(k4, 'Down') # move backwards 

screen.onkey(clear, 'c') # clear page 
screen.onkey(save, 'p') # save page 
screen.onkey(load, 'l') # load page 

screen.listen() 

screen.mainloop() 
+0

這個作品完全謝謝你,我會把它添加到我的項目中 – Gurneyguy

0

此文件IO教程蟒蛇應該有所幫助:http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python

你將要特別注意對分割線的部分。您可能想要根據逗號而不是空格分割線。

使用循環來遍歷文本文件可能不是必要的,如果你只有一條線。如果你正確地分割線,它應該給你一個很好的數組,這對應於烏龜應該做的動作。例如:

file = open("movefile.txt","r") 
moves = file.readline().split(",") 

可能工作。這一切都取決於如何設置包含預先存在的移動的文本文件。

編輯:

它可能有助於編寫移動到文本文件以不同的方式。當試圖閱讀時,它會爲你節省一些頭痛。而不是說,my_file.write(moves)的,它可能是更好的使用方法:

for i in moves: 
    my_file.write(str(i)+",") 

這應該使您的文本文件看起來像「1,1,1,2,3,3,1」,

隨着這種格式我放的第一塊代碼應該能夠將所有數字都放到「移動」數組中。我建議將該數組名稱更改爲「moves_from_file」之類的內容。一旦你有...

for j in moves_from_file: 
    if moves_from_file[j] == "1": 
     k1() 
    if moves_from_file[j] == "2": 
     k2() 
    if moves_from_file[j] == "3": 
     k3() 
    if moves_from_file[j] == "4": 
     k4() 

應該做的伎倆。

+0

我如何落實到我的編程這?我只是說... readline(1)...?或者我需要說如果移動= file.readline()。split(「,」)= 1? – Gurneyguy

+0

另外,爲了讓烏龜實際移動,我怎麼說讀字1,如果它說1然後向前移動,如果它說2,向右轉。例如。 – Gurneyguy

+0

首先你想從文本文件中獲取數字到數組中。在我設置的數組名稱爲「移動」的情況下。一旦你有了這個,然後你想通過for循環遍歷你的數組,並檢查數組中的每個點的數量,並做相應的移動。像'爲我在移動:如果移動[i] == 1,做k1(),如果移動[i] == 2,做k2()'這樣的事情@Gurneyguy –