Estoy consiguiendo el error en Python 3.6 TypeError: '>' no es compatible entre instancias de 'lista' y 'int'

votos
-2

Estoy consiguiendo el error en Python 3.6 TypeError:

'>' No es compatible entre instancias de 'lista' y 'int'

Estoy tratando de tomar datos de otro programa Python y utilizarlo para mostrar al flexionar o no, pero no sé la sintaxis para esto. Mi código se pega a continuación.

Sólo necesito para obtener el número entero sin signo de 8 bits que se compara con los datos que están siendo tomadas en.

import pyglet
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import socket
import threading
import sys
import os
import math

#Un-comment this if using OS-X.
#os.system('defaults write org.python.python ApplePersistenceIgnoreState NO')

WindowSize = 5000
SampleRate = 1000.0
VoltsPerBit = 2.5/256

#Define global variables
Fs = 1000
FlexWindowSize = 0.25
data = []
displayData = [-2 for i in range(WindowSize)]
flexing = False

# This reads from a socket.
def data_listener():
  global data
  UDP_PORT = 9000
  sock = socket.socket(socket.AF_INET, # Internet
                      socket.SOCK_DGRAM) # UDP
  sock.bind((UDP_IP, UDP_PORT))
  while True:
    newdata, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    data.extend(list(newdata))

#Handle command line arguments to get IP address
if (len(sys.argv) == 2):
    try:
        UDP_IP = sys.argv[1]
        socket.inet_aton(UDP_IP)
    except:
        sys.exit('Invalid IP address, Try again')
else:
    sys.exit('EMG_Acquire <Target IP Address>')

#Connect the UDP_Port
UDP_PORT = 9000
sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP

print('Connected to ', str(UDP_IP))
print(Listening for incoming messages...)
print('Close Window to exit')

#Start a new thread to listen for data over UDP
thread = threading.Thread(target=data_listener)
thread.daemon = True
thread.start()

#Load and place image resources
pyglet.resource.path = ['./resources']
pyglet.resource.reindex()
ForeArm_image = pyglet.resource.image(forearm.png)
Bicep_image = pyglet.resource.image(Bicep.png)
ForeArm_image.anchor_x = 7
ForeArm_image.anchor_y = ForeArm_image.height-150
Bicep_image.anchor_x = Bicep_image.width/2
Bicep_image.anchor_y = Bicep_image.height/2

#Define the moving ForeArm class
class ForeArm(pyglet.sprite.Sprite):
  def __init__(self, *args, **kwargs):
    super(ForeArm,self).__init__(img=ForeArm_image,*args, **kwargs) 
    self.rotate_speed = 100.0
    self.rotation_upper_limit = -10
    self.rotation_lower_limit = -100
    self.rotation = self.rotation_upper_limit
    self.key_handler = pyglet.window.key.KeyStateHandler()

  def update(self, dt):
    if flexing:
      if not ((self.rotation-self.rotate_speed*dt) <=   self.rotation_lower_limit):
        self.rotation -= self.rotate_speed*dt
      else:
        self.rotation = self.rotation_lower_limit
    else:
      if not((self.rotation+self.rotate_speed*dt) >= self.rotation_upper_limit):
        self.rotation += self.rotate_speed*dt
      else:
        self.rotation = self.rotation_upper_limit

#Setup the main window
main_window = pyglet.window.Window(1000,600)
main_batch = pyglet.graphics.Batch()
background = pyglet.graphics.OrderedGroup(0)
foreground = pyglet.graphics.OrderedGroup(1)
bicep = pyglet.sprite.Sprite(img=Bicep_image,x=350,y=150,batch=main_batch,group=background)
forearm = ForeArm(x=510, y=115,batch=main_batch,group=foreground)
pyglet.gl.glClearColor(1, 1, 1, 1)
main_window.push_handlers(forearm)
main_window.push_handlers(forearm.key_handler)


def update(dt):
  global displayData, data, flexing

  newData = list(data)

  data = []
  newDisplay = list(displayData[len(newData):len(displayData)] + newData)
  displayData = list(newDisplay)

  #Put your flex algorithm code here!
  #If flexing is detected, set the 'flexing' variable to True.
  #Otherwise, set it to False. 
  #############################
  #ALL OF YOUR CODE SHOULD GO BELOW HERE

  if displayData > 20:
    flexing = True
  else: 
    flexing = False

  #ALL OF YOUR CODE SHOULD GO ABOVE HERE
  forearm.update(dt)

@main_window.event
def on_draw():
    main_window.clear()
    main_batch.draw()

   pyglet.clock.schedule_interval(update, 1/120.0)
   pyglet.app.run()
Publicado el 07/11/2018 a las 22:30
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

En primer lugar, usted ya está instanciar newDisplaycomo una lista, así que no hay necesidad de hacerlo displayData = list(newDisplay). Usted sólo puede hacer displayData = newDisplay.

En segundo lugar, cuando se intenta evaluar displayData > 5, que está comparando una lista a un entero. Esto es como preguntar, "es esta lista mayor de 5?". Eso no tiene sentido lógico.

Un paradigma es mucho más común para preguntar si una lista de longitud es mayor que algún número. ¿Estás tratando de decir: "Si la longitud de la displayDatalista es mayor que 20, hacer algo"? Si es así, utilice if len(displayData) > 5.

Sin embargo, tiene algunos problemas más grandes lógicos en estas líneas de código:

newDisplay = list(displayData[len(newData):len(displayData)] + newData)
displayData = list(newDisplay) 

Usted está intentando utilizar displayDatadentro de su newDisplaydefinición, pero displayDataaún no existe en ese punto en el código.

Como se ha mencionado otra persona, podemos ayudarle con mayor eficacia si usted pone el código sólo lo suficiente para transmitir su problema, junto con el mensaje de error completo.

Respondida el 07/11/2018 a las 23:33
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more