簡體   English   中英

你如何讓python在列表中找到特定的文本然后打印出來

[英]How do you get python to find specific text in a list and then print it

這是我到目前為止:

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然后在列表中找到client ID,用強度級別(高或中)打印clientID,以便我稍后可以使用它來詢問用戶他們鍛煉了多少分鍾在不同的活動中,根據他們的強度是高還是中等。

目前,代碼只打印列表的第一部分,而不管變量 answer 是什么:["NeQua, High"]。

請你告訴我如何解決這個問題並盡量保持簡單,因為我對 Python 比較陌生。

謝謝卡梅倫

改用字典(並且不需要將它包裝在一個只創建全局對象的函數中)。

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()只是返回可迭代對象中的下一個元素。 由於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返回可迭代對象的第一個元素,因此您始終獲得ClientList的第一個元素,因此您需要過濾掉包含您的 ID 的元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM