Python 代码中的语法无效

Python 代码中的语法无效,python,python-3.x,Python,Python 3.x,我在处理这段代码时遇到了问题 print("The Overall Winner is,", sorted(data, key=lambda(x,y): sum(n[1] for n in y), reverse=True),sum(event[1] for event in event_data)) 这是说,无效的语法,我不知道是什么错了 这是节目的其余部分 def main(): print("Welcome!\n") n_events = get_number_of_events()

我在处理这段代码时遇到了问题

print("The Overall Winner is,", sorted(data, key=lambda(x,y): sum(n[1] for n in y), reverse=True),sum(event[1] for event in event_data))
这是说,无效的语法,我不知道是什么错了

这是节目的其余部分

def main():
print("Welcome!\n")

n_events = get_number_of_events()
events_names = get_events_names(n_events)
print()
data = get_data(events_names)
print()
for house_name, event_data in data:
    print ("House " + house_name)

    for event_name, score in event_data:
        # note the use of tuple unpacking 
        print ("\tEvent: %s Score: %i" % (event_name, score))

print("The Overall Winner is,", sorted(data, key=lambda(x,y): sum(n[1] for n in y), reverse=True),sum(event[1] for event in event_data))
谢谢你的帮助

编辑:

整个计划

LOWER_BOUND = 0
UPPER_BOUND = 100

def get_score(house_name, event_name):
score = -1
while score < LOWER_BOUND or score > UPPER_BOUND:
    try:
        score = int(input("Please enter score for %s in the event %s:" % (house_name, event_name)))
        if score < LOWER_BOUND :
            print ("Score is too low, minimum score is %i.\nPlease try again." % min_score)
        if score > UPPER_BOUND:
            print ("Score is too high, maximum score is %i\nPlease try again." % max_score)
    except ValueError:
        print("Invalid Input please enter an integer. Thanks")
return score

def get_number_of_events():
print("Please enter the number of events there is.")
while True:
    try:
        n_events = int(input(">>"))
    except ValueError:
        print("Enter only a number, Thanks.")
    if n_events > 100:
        print("WOW, that's a lot of events, please be reasonable. Thanks.")
    elif n_events < 1:
        print ("That's too few events! Try Again.")
    else:
        break
return n_events

def get_events_names(n_events):
print ("Please enter the events names")
events = []
for n in range(1, n_events + 1):
    event_name = input("Event %i name: " % n)
    events.append(event_name)
return events

def get_data(events):
data = []
while True:
    house_name = input("Please enter house names <<<Enter XXX when finished>>> :")
    if house_name.upper() == "XXX":
        break

def main():
print("Welcome!\n")

n_events = get_number_of_events()
events_names = get_events_names(n_events)
print()
data = get_data(events_names)
print()
for house_name, event_data in data:
    print ("House " + house_name)

    for event_name, score in event_data:
        print ("\tEvent: %s Score: %i" % (event_name, score))

print("The Overall Winner is,", sorted(data, key=lambda(x,y): sum(n[1] for n in y), reverse=True),sum(event[1] for event in event_data))

    print ("Please enter the events points in ascending order.")
    scores = []
    for event_name in events:
        score = get_score(house_name, event_name)
        scores.append([event_name, score])
    data.append([house_name, scores])
return data

if __name__ == '__main__':
main()
下限=0
上界=100
def get_分数(房屋名称、活动名称):
分数=-1
当分数<下限或分数>上限时:
尝试:
score=int(输入(“请在%s事件中输入%s的分数:%”(房屋名称、事件名称)))
如果分数<下限:
打印(“分数太低,最低分数为%i。\n请重试。”%min\u分数)
如果分数>上限:
打印(“分数太高,最大分数为%i\n请重试。”%max\u分数)
除值错误外:
打印(“无效输入,请输入整数。谢谢”)
回击得分
def get_事件数()
打印(“请输入存在的事件数”)
尽管如此:
尝试:
n_事件=int(输入(“>>”)
除值错误外:
打印(“请只输入一个数字,谢谢。”)
如果n_事件>100:
打印(“哇,这是很多事件,请讲道理。谢谢。”)
elif n_事件<1:
打印(“事件太少!请重试”)
其他:
打破
返回n_事件
def get_事件名称(n_事件):
打印(“请输入事件名称”)
事件=[]
对于范围内的n(1,n_事件+1):
事件名称=输入(“事件%i名称:”%n)
events.append(事件名称)
返回事件
def get_数据(事件):
数据=[]
尽管如此:
房屋名称=输入(“请输入房屋名称:”)
如果house_name.upper()=“XXX”:
打破
def main():
打印(“欢迎!\n”)
n_事件=获取_事件的数量()
事件名称=获取事件名称(n个事件)
打印()
数据=获取数据(事件名称)
打印()
对于房屋名称,数据中的事件数据:
打印(“房屋”+房屋名称)
对于事件名称,事件数据中的分数:
打印(“\t事件:%s分数:%i”%(事件名称,分数))
打印(“总冠军是,”,已排序(数据,key=lambda(x,y):sum(n[1]表示y中的n,reverse=True),sum(事件[1]表示事件中的事件数据))
打印(“请按升序输入事件点”)
分数=[]
对于事件中的事件名称:
得分=得分(房屋名称、活动名称)
分数。追加([事件名称,分数])
数据。追加([房屋名称,分数])
返回数据
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

假设实际程序中的缩进是正确的,并且这是Python3.x(因为您似乎在使用print作为函数),问题将出现在lambda语句中。一个很小的例子来说明你的问题-

>>> a = lambda (x,y) : x+y
  File "<stdin>", line 1
    a = lambda (x,y) : x+y
               ^
SyntaxError: invalid syntax
而且,这对我来说似乎不可读,您应该将其分解为多行(可能在打印之前将中间结果保存在不同的变量中,这样会更可读)


正如你在评论中所说的-


例如,在这张图片中,我想要最高的字符串和要打印的总点数,如中所示

如果您想要具有最高值的元素,则取第一个元素,因为数组中的元素也是列表,所以使用下标获取其名称。范例-

print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True),sum(event[1] for event in event_data))
print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)[0][0],sum(event[1] for event in event_data))

根据评论的最新要求,请-

sortedlist = sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)
print("The Overall Winner is,", sortedlist[0][0], sum(n[1] for n in sortedlist[0][1]))

假设实际程序中的缩进是正确的,并且这是Python3.x(因为您似乎将print用作函数),那么问题将出现在lambda语句中。一个很小的例子来说明你的问题-

>>> a = lambda (x,y) : x+y
  File "<stdin>", line 1
    a = lambda (x,y) : x+y
               ^
SyntaxError: invalid syntax
而且,这对我来说似乎不可读,您应该将其分解为多行(可能在打印之前将中间结果保存在不同的变量中,这样会更可读)


正如你在评论中所说的-


例如,在这张图片中,我想要最高的字符串和要打印的总点数,如中所示

如果您想要具有最高值的元素,则取第一个元素,因为数组中的元素也是列表,所以使用下标获取其名称。范例-

print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True),sum(event[1] for event in event_data))
print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)[0][0],sum(event[1] for event in event_data))

根据评论的最新要求,请-

sortedlist = sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)
print("The Overall Winner is,", sortedlist[0][0], sum(n[1] for n in sortedlist[0][1]))

假设实际程序中的缩进是正确的,并且这是Python3.x(因为您似乎将print用作函数),那么问题将出现在lambda语句中。一个很小的例子来说明你的问题-

>>> a = lambda (x,y) : x+y
  File "<stdin>", line 1
    a = lambda (x,y) : x+y
               ^
SyntaxError: invalid syntax
而且,这对我来说似乎不可读,您应该将其分解为多行(可能在打印之前将中间结果保存在不同的变量中,这样会更可读)


正如你在评论中所说的-


例如,在这张图片中,我想要最高的字符串和要打印的总点数,如中所示

如果您想要具有最高值的元素,则取第一个元素,因为数组中的元素也是列表,所以使用下标获取其名称。范例-

print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True),sum(event[1] for event in event_data))
print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)[0][0],sum(event[1] for event in event_data))

根据评论的最新要求,请-

sortedlist = sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)
print("The Overall Winner is,", sortedlist[0][0], sum(n[1] for n in sortedlist[0][1]))

假设实际程序中的缩进是正确的,并且这是Python3.x(因为您似乎将print用作函数),那么问题将出现在lambda语句中。一个很小的例子来说明你的问题-

>>> a = lambda (x,y) : x+y
  File "<stdin>", line 1
    a = lambda (x,y) : x+y
               ^
SyntaxError: invalid syntax
而且,这对我来说似乎不可读,您应该将其分解为多行(可能在打印之前将中间结果保存在不同的变量中,这样会更可读)


正如你在评论中所说的-


例如,在这张图片中,我想要最高的字符串和要打印的总点数,如中所示

如果您想要具有最高值的元素,则取第一个元素,因为数组中的元素也是列表,所以使用下标获取其名称。范例-

print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True),sum(event[1] for event in event_data))
print("The Overall Winner is,", sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)[0][0],sum(event[1] for event in event_data))

根据评论的最新要求,请-

sortedlist = sorted(data, key=lambda x: sum(n[1] for n in x[1]), reverse=True)
print("The Overall Winner is,", sortedlist[0][0], sum(n[1] for n in sortedlist[0][1]))

您的问题是,在使用Python3时,在lambda中使用参数解包。而不是这样做:

lambda(x,y): sum(n[1] for n in y)
这样做:

lambda item: sum(n[1] for n in item[1])

您的问题是,在使用Python3时,在lambda中使用参数解包。而不是这样做:

lambda(x,y): sum(n[1] for n in y)
这样做:

lambda item: sum(n[1] for n in item[1])
你的问题