如何让python在列表中找到特定的文本,然后打印i

2024-05-18 21:05:03 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我的情况是:

def lists():
    global ClientList, highList, moderateList
    ClientList = [    ["NeQua,High"],
                      ["ImKol,Moderate"],
                      ["YoTri,Moderate"],
                      ["RoDen,High"],
                      ["NaThe,Moderate"],
                      ["ReWes,Moderate"],
                      ["BrFre,High"],
                      ["KaDat,High"],
                      ["ViRil,High"],
                      ["TrGeo,High"]]
     highList = ["Running", "Swimming", "Aerobics", "Football", "Tennis"]
     moderateList = ["Walking", "Hicking", "Cleaning", "Skateboarding", "Basketball"]
     checkclient()

def checkclient():
    global ClientList, highList, moderateList
    answer = input("please enter the client ID: ")
    answer2 = next(answer for answer in ClientList)
    print(answer)

因此,我要输入特定的clientID,我要python在列表中找到客户机ID,打印强度级别(高或中等)的clientID,以便稍后我可以使用它来询问用户,根据强度是高还是中等,他们在不同的活动中花了多少分钟进行锻炼。你知道吗

此时,代码只打印列表的第一部分,而不管变量的答案是什么:[“NeQua,High”]。你知道吗

请告诉我如何解决这个问题,并尽量保持简单,因为我对Python比较陌生。你知道吗

谢谢 卡梅隆


Tags: answerid列表def情况globalclientidhigh
2条回答

改用字典(无需将其包装到只创建全局对象的函数中)。你知道吗

ClientList = {"NeQua":"High",
              "ImKol":"Moderate",
              "YoTri":"Moderate",
              "RoDen":"High",
              "NaThe":"Moderate",
              "ReWes":"Moderate",
              "BrFre":"High",
              "KaDat":"High",
              "ViRil":"High",
              "TrGeo":"High"}

如果您只想对它们进行变异,则不需要将list之类的可变对象或字典指定为global。如果希望对同一名称的本地分配也分配给全局名称,则只需要global。不过,更重要的是,next()只返回iterable中的下一个元素。因为list是一个有序序列,所以用answer for answer in ClientList生成的生成器将具有相同的顺序,并且该生成器的next()(冗余,我可以添加)将始终是ClientList的第一个元素,因为您一直在生成一个新的生成器。如果您想next()继续整个过程,您必须先保存它。然而,这些在这里都不是必要的。只要查字典就行了。我在这里使用get(),以避免用户试图访问不存在的用户时出错。你知道吗

def checkclient():
    answer = input("please enter the client ID: ")
    print(ClientList.get(answer, 'Not found.'))

checkclient()

还要注意的是,在调用函数之前必须定义函数(顺序问题)。你知道吗

您可以按以下方式更改它:

def checkclient():
    global ClientList, highList, moderateList
    answer = input("please enter the client ID: ")  # input: NaThe
    try:
        answer2 = next(a for a in ClientList if answer in a) 
    except StopIteration:
        checkclient()
    else:
        print(answer2)  # NaThe,Moderate

next返回iterable的第一个元素,因此总是得到ClientList的第一个元素,因此需要过滤掉包含ID的元素

相关问题 更多 >

    热门问题