Python 函数不';t返回正确的值
我在这个问题上纠缠了好几个小时 我已经编写了一个Python代码来读取和转换文本文件中的数据,一切都运行良好Python 函数不';t返回正确的值,python,function,return,Python,Function,Return,我在这个问题上纠缠了好几个小时 我已经编写了一个Python代码来读取和转换文本文件中的数据,一切都运行良好 simulink_robot_motor1=[] with open('C:\\Users\...\sensor_data.txt',"r") as data_file: rows=0 for line in data_file: rows=rows+1 columns=len(line.split(",")) simulink_robot
simulink_robot_motor1=[]
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
rows=0
for line in data_file:
rows=rows+1
columns=len(line.split(","))
simulink_robot_motor=[[0 for x in range(columns)] for y in range(rows)]
i=0
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
for line in data_file:
current_line = line.split(",")
current_line = list(map(float, current_line))
simulink_robot_motor[i]=current_line
i=i+1
我对具有以下结果的simulink\u robot\u motor
变量感兴趣:
[[0.0, 3.6],
[1.6e-06, 3.6],
[4.57e-06, 3.6],
[7.67e-06, 3.6],
[1.09e-05, 3.6],
...
现在,我想在函数中使用这段代码。因此,如果我调用该函数,应该返回listsimulink\u robot\u motor
def get_matlab_sensor_data():
simulink_robot_motor1=[]
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
rows=0
for line in data_file:
rows=rows+1
columns=len(line.split(","))
simulink_robot_motor=[[0 for x in range(columns)] for y in range(rows)]
i=0
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
for line in data_file:
current_line = line.split(",")
current_line = list(map(float, current_line))
simulink_robot_motor[i]=current_line
i=i+1
return (simulink_robot_motor)
但是如果我运行get\u matlab\u sensor\u data()
我会得到以下结果:
[[0, 3.6],
[0, 0],
[0, 0],
[0, 0],
[0, 0],
...
我尝试了更小的数据集,也关闭了科学十进制风格。然而,它仍然不起作用。我的循环是否运行不正常?您的return语句处于不正确的缩进级别,因此它在for循环中执行得太快,永远不会完成循环
def get_matlab_sensor_data():
simulink_robot_motor1=[]
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
rows=0
for line in data_file:
rows=rows+1
columns=len(line.split(","))
simulink_robot_motor=[[0 for x in range(columns)] for y in range(rows)]
i=0
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
for line in data_file:
current_line = line.split(",")
current_line = list(map(float, current_line))
simulink_robot_motor[i]=current_line
i=i+1
return (simulink_robot_motor)
此外,您可能不需要使用以下语句缩进第二个语句:
def get_matlab_sensor_data():
simulink_robot_motor1=[]
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
rows=0
for line in data_file:
rows=rows+1
columns=len(line.split(","))
simulink_robot_motor=[[0 for x in range(columns)] for y in range(rows)]
i=0
with open('C:\\Users\...\sensor_data.txt',"r") as data_file:
for line in data_file:
current_line = line.split(",")
current_line = list(map(float, current_line))
simulink_robot_motor[i]=current_line
i=i+1
return (simulink_robot_motor)
首先,在原始代码中,您将整个文件读取两次,这是不必要的。这里有一个简化:
simulink_robot_motor=[]
with open(filename,'r') as data_file:
for line in data_file:
current_line = list(map(float, line.split(',')))
simulink_robot_motor.append(current_line)
print(simulink_robot_motor) # -> [[0.0, 3.6], [1.6e-06, 3.6], [4.57e-06, 3.6], [7.67e-06, 3.6], [1.09e-05, 3.6]]
当您试图将代码转换为函数时,出现了两个问题,一个是simulink\u robot\u motor
成为函数外部不存在的局部变量。第二个是在数据文件的第二个for行:
循环中有一个return
语句,这意味着它将在只读取一行之后返回
以下内容解决了这两个问题,并展示了如何使用新功能:
def get_matlab_sensor_data():
results=[]
with open(filename,'r') as data_file:
for line in data_file:
current_line = list(map(float, line.split(',')))
results.append(current_line)
return results
simulink_robot_motor = get_matlab_sensor_data()
print(simulink_robot_motor) # -> same results as before
可能有助于提供示例输入和预期输出。谢谢@martineau。丹尼斯:不客气。请考虑一下我的答案。看,我不能,因为我的名声不好。当我的分数达到15分时,我会的。