求該題目程式碼
高中職畢業生希望選擇心目中理想的大學。
假設每一大學可以用下列七種屬性表示:
BC(Big Campus):代表有大校園。
NC(Next to City):代表鄰近有大城市。
CT(Convenient Transportation):代表交通方便。
NS(Next to Sea):代表靠海。
NM(Next to Mountain):代表依山。
HL(Has Lake):代表校園有湖。
NL(Near Landscape):代表附近有風景區。
輸入說明:
1. 第一行輸入一個【正整數】,代表大學個數 n ,請注意 【n<=10 】。
2. 其後 n 行,每一行第一項為大學名稱,接著為大學具備的屬性。
一個大學名稱【最多有 10 個字母】,【各項屬性為 2 個字母】。大學與屬性資料【均為英文字母】,
大學名稱及各屬性間以【一個空白】分隔。
3. 接下來的一行輸入一個查詢
查詢條件為校園屬性組成,每個校園屬性為【2個字元】,
此外,用 + 號區隔的條件代表 "或" 的關係,用空白區隔的條件代表 "且" 的關係,用 ! 號連接屬性代表 “不” 的關係。
屬性之間以及和 + 之間有一空白間隔( ! 號與屬性之間沒有空白間隔)。
以 + 號區隔不同的子條件。
其格式如下:
BC NS + CT HL + NL !NM
意思為屬性條件為: 三種子條件,BC 且 NS ,或是 CT 且 HL ,或是 NL 且不要 NM。
代表需找出有大校園且靠海,或 交通方便且校園有湖的所有大學名稱,或 附近有風景區且不要依山。
輸出說明:
所有符合之大學名稱與符合子條件個數(比如: NTUT,3)。
若有多個大學符合一個查詢,各大學間以一個空白分隔。
每行查詢的輸出順序,請根據大學符合的子條件個數進行排序,
若條件個數相同,則根據輸入大學的順序來排序。
Sample Input:
2 # 兩間學校
A BC NC CT NS NM HL # A學校 符合BC、NC、CT、NS、NM、HL
B CT NS NM # B學校 符合CT、NS、NM
CT NS + !NL + NM HL # 三種子條件,CT 且 NS 或 不NL 或 NM且HL
Sample Output:
A,3 B,2 # A學校三種子條件皆符合,B學校僅符合CT NS、!NL 兩種子條件
--------------------------------------------------------------------
Sample Input:
2
A BC NC CT NS NM HL
B CT NS NM
CT + HL + !BC
Sample Output:
A,2 B,2

Python-設計大學條件
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- chuifengde 2021-12-28 10:24关注
d = {'BC': ['Big Campus', '有大校園'], 'NC': ['Next to City', '鄰近有大城市'], 'CT': ['Convenient Transportation', '交通方便'], 'NS': ['Next to Sea', '靠海'], 'NM': ['Next to Mountain', '依山'], 'HL': ['Has Lake', '有湖'], 'NL': ['Near Landscape', '附近有風景區'], } def SELECT(dictC, con): dicNames = {} for k, v in dictC.items(): if isinstance(con, list): # 是并且 if set(v).issuperset(set(con)): dicNames[k] = dicNames.get(k, 0) + 1 elif isinstance(con, str): # 是单个条件或非条件 if con[0] == '!': if con[1:] not in v: dicNames[k] = dicNames.get(k, 0) + 1 else: if con in v: dicNames[k] = dicNames.get(k, 0) + 1 return dicNames def UpdateDict(dic1, dic2): for k, v in dic2.items(): x = dic1.get(k, 0) if x == 0: dic1[k] = v else: dic1[k] += v return dic1 n = int(input("输入学校个数:")) d1 = {} for _ in range(n): S = input("输入学校名称及属性:").split() d1[S[0]] = S[1:] dicRes = {} # 储存结果 condition = input("输入查询条件:") cods = list(map(lambda x: x.strip(), condition.split("+"))) for cod in cods: if ' ' in cod: c = cod.split() else: c = cod dR = SELECT(d1, c) UpdateDict(dicRes, dR) for k, v in dicRes.items(): print(f"{k},{v} ", end = ' ') '''--result 输入学校个数:2 输入学校名称及属性:A BC NC CT NS NM HL 输入学校名称及属性:B CT NS NM 输入查询条件:CT NS + !NL + NM HL A,3 B,2 '''
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报