我是Python的初学者,致力于为我们的最后一年项目开发一个简单的应用程序。这是我无法解决的唯一部分,非常感谢您的帮助。我需要从实时更新的csv文件中获取一个值,获取第一个元素并将其与参考csv进行匹配。该部分已经在工作。然后,我需要它来播放相应的声音。该部分也已经在工作。
但是,由于它将位于Kivy应用程序中,因此我需要创建多个类。一些将处理数据处理端,而Kivy部分将处理显示部分。但是我今天的问题是针对Kivy中的Python部分。
第一个类处理csv,playsound和numpy匹配。
第二个类是我试图调用第一个类的函数以使其运行的地方。我还尝试使where
变量出现在第一类中,以便可以在if语句中使用它来验证匹配项并输出文本显示。
import serial
import sys
import numpy as np
import time
import csv
import os
import string
import collections
from playsound import playsound
from pathlib import Path
import os, sys
#import keyboard
class Identifier:
def csvwriter(self): #function for writing csv file
try:
ser = serial.Serial('COM10', baudrate=9600)
ser.flushInput()
while True:
ser_bytes = ser.readline()
print(ser_bytes)
file = open("letterz5.csv", "a")
file.write(str(ser_bytes))
file.close()
# if keyboard.is_pressed('esc'):
# break;
ser.close
except:
print("Unexpected error:", sys.exc_info()[0])
print("Unexpected error:", sys.exc_info()[1])
def fn_voice(self): #function for parsing and comparing csv file.
count=1
while (count>0):
livecsv=np.genfromtxt("lettera.csv", delimiter=",", skip_header=1, filling_values=np.nan, dtype=int, case_sensitive=True, deletechars='', replace_space=' ')
refcsv=np.genfromtxt("refcsv1.csv", delimiter=",", skip_header=1, filling_values=np.nan, dtype=int, case_sensitive=True, deletechars='', replace_space=' ')
A=np.array(livecsv)
B=np.array(refcsv)
D = B - A[-1]
match= B[np.abs(D).sum(axis=1).argmin()]
where=match[0]
voice=fn_voice(where)
time.sleep(1)
count = count + 1
var=where
if var==1:
A=playsound('audio-alphabet/A.wav',True)
return A
elif var==2:
B=playsound('audio-alphabet/B.wav',True)
return B
elif var==3:
C=playsound('audio-alphabet/C.wav',True)
return C
elif var==4:
D=playsound('audio-alphabet/D.wav',True)
return D
elif var==5:
E=playsound('audio-alphabet/E.wav',True)
return E
elif var==6:
F=playsound('audio-alphabet/F.wav',True)
return F
elif var==7:
G=playsound('audio-alphabet/G.wav',True)
return G
elif var==8:
H=playsound('audio-alphabet/H.wav',True)
return H
elif var==9:
I=playsound('audio-alphabet/I.wav',True)
return I
elif var==10:
J=playsound('audio-alphabet/J.wav',True)
return J
elif var==11:
K=playsound('audio-alphabet/K.wav',True)
return K
elif var==12:
L=playsound('audio-alphabet/L.wav',True)
return L
elif var==13:
M=playsound('audio-alphabet/M.wav',True)
return M
elif var==14:
N=playsound('audio-alphabet/N.wav',True)
return N
elif var==15:
O=playsound('audio-alphabet/O.wav',True)
return O
elif var==16:
P=playsound('audio-alphabet/P.wav',True)
return P
elif var==17:
Q=playsound('audio-alphabet/Q.wav',True)
return Q
elif var==18:
R=playsound('audio-alphabet/R.wav',True)
return R
elif var==19:
S=playsound('audio-alphabet/S.wav',True)
return S
elif var==20:
T=playsound('audio-alphabet/T.wav',True)
return T
elif var==21:
U=playsound('audio-alphabet/U.wav',True)
return U
elif var==22:
V=playsound('audio-alphabet/V.wav',True)
return V
elif var==23:
W=playsound('audio-alphabet/W.wav',True)
return W
elif var==24:
X=playsound('audio-alphabet/X.wav',True)
return X
elif var==25:
Y=playsound('audio-alphabet/Y.wav',True)
return Y
elif var==26:
Z=playsound('audio-alphabet/Z.wav',True)
return Z
os.system("rm lettera.csv")
class LetterAScreen(Identifier):
def identity(self): #I tried to call the functions of Identifier class here but they won't run
fn_voice() #I need the playsound part to only return playsound when the input data is correct
fn_csvwriter()
iden=fn_voice().where #I need to get the variable 'where' from fn_voice() but I can't seem to get it
def verifier(self):
verify=identity.iden
if verify == 1:
print ("correct")
else:
print ("incorrect")
我该如何处理?如何使所有第一类都运行,如何获取where
变量,以便可以在verifier
函数中使用它?非常感谢。
答案 0 :(得分:0)
在python中,您无法像使用fn_voice().where
一样访问变量。
在https://pythonspot.com/scope/上阅读有关范围的更多信息。
解决您的问题的方法是在类而不是方法中分配where
引用(变量)。
class Identifier:
where = None
def fn_voice(self):
where = match[0]
然后,您将可以像这样访问where
:
Identifier.where
NB。请记住检查where
的值是否为None
。我们可以使用标准的python真值测试https://docs.python.org/2.4/lib/truth.html。
if Identifier.where:
#Logic if where is not None.