在python中没有使用eval函数实现错误

问题描述 投票:0回答:1

我正在用python龟制作东西。下面显示的eval函数应该运行h()或i()。这些是现在唯一可行的功能,因此唯一可行的工作是hi或ih或i或h。控制台返回一个notimplementederror:eval尚未实现。我不明白,因为我进入一个全新的东西,并把基本的代码,如eval('1'),但这也不起作用。谢谢顺便说一下,我是python的新手所以我不擅长它,所以如果我犯了愚蠢的错误,请记住我。

import turtle

from time import sleep
ninja = turtle.Turtle()
ninja.hideturtle()
coordinate1 = ninja.xcor()
coordinate2 = ninja.ycor()
new1=''
new2=''

ninja.speed(10)
def h():
  ninja.left(90)
  ninja.forward(50)
  ninja.back(100)
  ninja.forward(50)
  ninja.right(90)
  ninja.forward(35)
  ninja.left(90)
  ninja.forward(-50)
  ninja.forward(100)
  coordinate1 = ninja.xcor()
  coordinate2 = ninja.ycor()
  new1 = coordinate1+50

  ninja.penup()
  ninja.goto(new1,0)

def i():
  ninja.forward(20)
  ninja.pendown()

  ninja.left(90)

  ninja.st()
  ninja.right(90)
  ninja.stamp()

  ninja.ht()
  ninja.penup()
  ninja.back(20)
  ninja.pendown()
  ninja.back(50)



  coordinate1 = ninja.xcor()

  new1 = coordinate1+50

  ninja.penup()
  ninja.goto(new1,0)



h()
i()
name = input('What is your name. It will be drawn in the tab to the left lowercase only please.')
print('The name will begin to draw in the tab to the left')
sleep(3)
ninja.clear()
ninja.goto(0,0)

name =  list(name)
print(name)
length = len(name)
x=0
while (x < length-1):         
  print(name[x])
  x = x + 1

  new2=name[x]+'()'
  print(new2)
  eval(new2)
python turtle-graphics
1个回答
1
投票

您不需要也不希望eval()实现此程序 - 您可以使用将字符映射到函数的字典来实现。下面是使用字典而不是eval()的代码的简化返工:

import turtle

def h():
    ninja.pendown()
    ninja.left(90)
    ninja.forward(100)
    ninja.backward(50)
    ninja.right(90)
    ninja.forward(40)
    ninja.left(90)
    ninja.forward(50)
    ninja.backward(100)
    ninja.right(90)

    ninja.penup()
    ninja.forward(25)

def i():
    ninja.forward(20)
    ninja.left(90)
    ninja.forward(70)
    ninja.right(90)
    ninja.pendown()
    ninja.circle(5)

    ninja.penup()
    ninja.left(90)
    ninja.backward(20)
    ninja.pendown()
    ninja.backward(50)
    ninja.right(90)

    ninja.penup()
    ninja.forward(45)

letters_to_code = {"h": h, "i": i}

name = input('What is your name? Lowercase only please: ')

ninja = turtle.Turtle()
ninja.penup()

for letter in name:
    if letter in letters_to_code:
        letters_to_code[letter]()

ninja.hideturtle()
turtle.done()

有些事情要考虑:

  • 有一个标准的字母高度,宽度和间距距离,并将它们定义为您在插入字母时可以使用的变量。
  • 为了下一个字母的利益,让每个字母在完成时将乌龟保持在原始的起始方向。这将允许您以任何顺序组合字母而不会出现意外。
© www.soinside.com 2019 - 2024. All rights reserved.