只是一个关于小脚本的快速问题,由于某种原因无法工作
我运行了这个脚本:
import serial
import time
import turtle
def serialreading():
serialPort = serial.Serial(
port="COM5", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
)
# Read data out of the buffer until a carraige return / new line is found
serialString = serialPort.readline()
turtlenumber = serialString.decode("Ascii")
# Print the contents of the serial data to ASCII
try:
print(turtlenumber)
except:
pass
def roomview():
t = turtle.Turtle()
t.speed(0) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.forward(turtlenumber)
time.sleep(1)
turtle.reset()
while 1 > 0:
serialreading()
roomview()
乌龟的目标是简单地画一条线,只要进入串行通信的数字(其变量是海龟编号)。对于这个例子,数字应该是 1192,但我从来没有看到它的实际情况,因为 shell 告诉我“ NameError:名称'turtlenumber'未定义 ”
请帮助我
变量“turtlenumber”的作用域有问题。在
serialreading
函数中定义它,但在
roomview
函数中试图访问它,在那里它是未定义的。
以下是修复代码的方法:
import serial
import time
import turtle
def serialreading():
serialPort = serial.Serial(
port="COM5", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
)
# 从缓冲区中读取数据,直到找到回车/换行符
serialString = serialPort.readline()
turtlenumber = serialString.decode("Ascii")
# 将串行数据的内容打印到ASCII
try:
print(turtlenumber)
return int(turtlenumber) # 返回turtlenumber
except:
return 0 # 返回默认值(例如,0)如果出现错误
def roomview(distance): # 将turtlenumber作为参数传递
t = turtle.Turtle()
t.speed(0) # 1:最慢,3:慢,5:正常,10:快,0:最快
t.forward(distance) # 使用传递的距离
time.sleep(1)
turtle.reset()
while 1 > 0:
turtlenumber = serialreading() # 获取turtlenumber
roomview(turtlenumber) # 将turtlenumber传递给roomview
这些变化包括:
-
从
serialreading
返回turtlenumber
: 我们修改serialreading
以返回读取的turtlenumber
值。 -
将
turtlenumber
作为参数传递给roomview
: 我们添加了一个参数到roomview
以接收turtlenumber
,并相应地修改了while
循环以传递该值。
通过这些修改,
turtlenumber
的值在两个函数之间正确共享,并且代码应该按预期工作。