[英]Statistics Mode function Exceptions in Python
我已經使用python統計數據庫中的mode函數編譯了一個小代碼。 該代碼基本上是從傳感器獲取輸入,將它們以10個輸入的陣列列出,然后在該列表中找到模式。 問題在於,只要有2個相同的通用值,代碼就會給出“ StatisticsError:無唯一模式”。
我希望它不輸出錯誤,而是以較小的值打印數據。 如果我可以訪問模式函數創建的列表,然后比較“ 2個或更多模式”,則可能會這樣做,但是我不太清楚該怎么做。
import RPi.GPIO as GPIO
import time
import math
import statistics
GPIO.setmode(GPIO.BCM)
TRIGA = 23
ECHOA = 24
TRIGB = 17
ECHOB = 27
dist_lista=[]
dist_listb=[]
print "Distance Measurement In Progress"
GPIO.setup(TRIGA,GPIO.OUT)
GPIO.setup(ECHOA,GPIO.IN)
GPIO.setup(TRIGB,GPIO.OUT)
GPIO.setup(ECHOB,GPIO.IN)
GPIO.output(TRIGA, False)
print "Waiting For Sensor To Settle"
time.sleep(1)
GPIO.output(TRIGB, False)
time.sleep(1)
def roundoff(x):
return int(math.ceil(x/10.0))*10
def function(TRIG, ECHO, var):
dist_list = []
for i in range (0,10):
GPIO.output(TRIG, True)
time.sleep(0.00001)
GPIO.output(TRIG, False)
while GPIO.input(ECHO)==0:
pulse_start = time.time()
while GPIO.input(ECHO)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = roundoff(distance)
dist_list.append(distance)
time.sleep(0.01)
if(distance<350 and distance>40):
try:
print "Distance",var, ":", statistics.mode(dist_list),"cm"
except statistics.StatisticsError as e:
print "Error: ", e
time.sleep(0.1)
while True:
function(TRIGA, ECHOA, "A")
function(TRIGB, ECHOB, "B")
GPIO.cleanup()
先感謝您
使用此函數代替statistics.mode
:
def lower_mode(sequence):
try:
return statistics.mode(sequence)
except statistics.StatisticsError as e:
return sorted(sequence)[len(sequence)//2 - 1]
然后,您可以使用以下調用替換代碼中的整個try-except塊:
if(distance < 350 and distance > 40):
print "Distance", var, ":", lower_mode(dist_list), "cm"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.