打印减少SyntaxError:无效的语法

时间:2018-09-10 10:28:44

标签: python

当我调用此方法patternFinder()时,出现了这样的错误

def patternFinder():
    avgaLine=((bid+ask)/2)
    x=len(avgaLine)-30
    y=11

    while y<x:
        outcomeRange=avgaLine[y+20:y+30]
        currentPoint=avgaLine[y]

        print reduce((lambda x,y:x+y,outcomeRange)/len(outcomeRange))
        print (currentPoint)
        print ('_________')

        time.sleep(5555)

我收到此错误:

  

文件<ipython-input-66-a32566f8689e>,第21行
  打印reduce((lambda x,y:x + y,outcomeRange)/ len(outcomeRange))
  SyntaxError:语法无效

enter image description here

4 个答案:

答案 0 :(得分:2)

这不是使用reduce的正确方法(应该在缩减后 进行除法),此外,您甚至不需要在此处使用reduce 。如果要计算平均值,请尝试以下方法:

print( sum(outcomeRange) / len(outcomeRange) )

顺便提防整数除法。确保outcomeRange至少包含一个十进制值,或者确保您导入了当前的除法函数:

from __future__ import division

答案 1 :(得分:1)

reduce接受两个单独的参数,函数和可迭代。因此,您的电话应该是

reduce(lambda x,y:x+y,  outcomeRange/len(outcomeRange))

但是,还要确保您的outcomeRange是一个numpy数组,否则,尝试将其除以数字时会遇到另一个语法错误。否则,将除法转换为[x/len(outcomeRange) for x in outcomeRange]

在那种情况下,最好在求和完成后除以长度 ,因此,您可以编写

reduce(lambda x, y: x+y, outcomeRange) / len(outcomeRange)

答案 2 :(得分:0)

您最有可能使用Python 3+,这意味着print语句的语法不正确。它必须放在括号中:

print(reduce((lambda x,y:x+y,outcomeRange)/len(outcomeRange)))

您在其他2条print语句中已正确完成操作,我想您只是在这里错过了它。

答案 3 :(得分:0)

对于 Python 3.8(Jupyter Notebook Anaconda)

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
import numpy as np
import time

def bytespdate2num(b):
    return mdates.datestr2num(b.decode('utf-8'))

date, bid, ask = np.loadtxt('GBPUSD1d.txt', unpack=True,
                            delimiter=',', converters={0:bytespdate2num})

def percentChange (startPoint, currentPoint):
    return ((float(currentPoint)-startPoint)/startPoint)*100.0

def patternFinder():
    avgLine = ((bid+ask)/2)
    x = len(avgLine) - 30

    y = 11
    while y < x:
        p1 = percentChange(avgLine[y-10], avgLine[y-9])
        p2 = percentChange(avgLine[y-10], avgLine[y-8])
        p3 = percentChange(avgLine[y-10], avgLine[y-7])
        p4 = percentChange(avgLine[y-10], avgLine[y-6])
        p5 = percentChange(avgLine[y-10], avgLine[y-5])
        p6 = percentChange(avgLine[y-10], avgLine[y-4])
        p7 = percentChange(avgLine[y-10], avgLine[y-3])
        p8 = percentChange(avgLine[y-10], avgLine[y-2])
        p9 = percentChange(avgLine[y-10], avgLine[y-1])
        p10 = percentChange(avgLine[y-10], avgLine[y])

        outcomeRange = avgLine[y+20:y+30]
        currentPoint = avgLine[y]

        print (sum(outcomeRange) / len(outcomeRange) )
        print (currentPoint)
        print (' ____')

        print (p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
        y += 1
        time.sleep(5555)

patternFinder()

输出

1.553601

1.553555

-0.001930961683282023 -0.0032182694721319405 -0.0032182694721319405 -0.0035400964193622853 -0.003861923366564046 -0.005471058102644308 -0.0061147119970621205 -0.00450557726099615 -0.00450557726099615 -0.004827404208212203