python-3.x 如何修复NameError:名称'turtle'未定义,您的意思是:“双胞胎”?

ut6juiuv  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(484)

所以我想要一个真实的说法
名称错误:未定义名称'turtle'。您的意思是:"双胞胎"?

from turtle import*

x = input('what is you fav color?(in eng pls)')
y = input('what is your name?')
yx10 = y * 100
t = turtle()
t.pencolor(x)t.forward(yx10)done*

i want it like that

2uluyalo

2uluyalo1#

避免使用from turtle import *,它会用数百个函数污染名称空间,并且通常会导致turtle的示例API和函数API之间的混淆:

print(len(globals())) # => 9
from turtle import *
print(len(globals())) # => 131

对比:

print(len(globals())) # => 9
import turtle
print(len(globals())) # => 10

额外的模块前缀类型化程度稍高,但使所有权更加清晰,使代码更具可读性,并有助于减少bug。
我们可以看到turtle模块有一个属性Turtle,可以调用它来创建一个turtle:

import turtle

print(turtle.Turtle) # => <class 'turtle.Turtle'>
t = turtle.Turtle()

一个常见的错误是调用返回的示例turtle,覆盖模块:

import turtle

print(turtle.Turtle) # => <class 'turtle.Turtle'>
turtle = turtle.Turtle() # wrong!

如果你想调用你的示例turtle,你可以使用:

from turtle import Turtle  # only import what you need

print(Turtle) # => <class 'turtle.Turtle'>
turtle = Turtle() # OK but potentially confusing

如果你不确定turtle对象上有什么可用的,可以检查docs或者使用dir

import turtle

print(dir(turtle))

# or filter out private properties
print([x for x in dir(turtle) if not x.startswith("_")])

在按顺序处理之后,代码出现了一个问题(除了格式错误之外,我认为这是粘贴到编辑器中的产物):

y = input('what is your name?')
yx10 = y * 100
print(type(yx10)) # => <class 'str'>
print(repr(yx10)) # => 'foofoofoofoofoofoofoo<...>'

您的意思可能是:

distance = int(input('How far do you want to move? '))
distance *= 100
print(type(distance)) # => <class 'int'>
print(repr(distance)) # => 500

错误处理是一个练习,包括上面的字符串到整数的转换以及非法的颜色字符串。
最后,如果不是复制粘贴错误,不要忘记调用done(),或者在修改导入后调用更好的turtle.done()。如果没有括号,除非你在另一个表达式中使用它,否则它是空操作。

相关问题