我一直试图在网上找到答案,但没有任何结果。 我正在尝试创建一个系统,用户可以在该系统中搜索列表并返回其主题和成绩,并使用过滤器仅显示某个区域的主题(例如信息科学),还可以过滤主题的级别(如果它是100lvl,200lvl或300lvl)我已经尝试过使用Sub_string,但无法正常工作。 所以到目前为止,我拥有的视图代码(带有sub_string)是这样的:
def finn():
global Karakterer
global Emner
print("Velg fag og/eller emnenivå (<enter> for alle)")
Fag = input("-Fag: ")
for sub_string in Emner:
if str(Fag) in sub_string:
print(*([sub_string] + ([Karakterer[sub_string]] if sub_string in Karakterer else [])))
这些是我的列表(已转换为Dicts以使其正常工作)
Emner = ["INFO100","INFO104","INFO110","INFO150","INFO125", "RELV102"]
FagKoder = [["Informasjonsvitenskap","INF"],["Kognitiv vitenskap","Kog"],
["Religionsvitenskap","REL"],["DigitalKultur","DIK"],["Økonomi","ECO"]]
Karakterer=[["INFO100","C"],["INFO104","B"],["INFO110","E"], ["RELV102","A"]]
Karakterer=dict(Karakterer)
FagKoder = dict(FagKoder)
这是现在打印出来的方式,也是我需要打印的方式:
我的问题是Sub_string剂量可以正确地满足我的需求,因为我需要能够允许用户选择一个区域(例如INFO)以及一个特殊级别(级别200),然后打印出所有内容INFO科目达到200级。 但是sub_string只会乱七八糟地检查列表中是否包含该字符串并进行打印。 有谁有更好的解决方案? 希望有道理 谢谢!
答案 0 :(得分:1)
一个最小的解决方法可能是从末尾分割数字并分别进行比较。
def finn():
global Karakterer # ugh
global Emner # ugh
want_subj = input("Velg fag (<enter> for alle): ")
want_level = input("Velg emnenivå (<enter> for alle): ")
try:
want_level = int(want_level)
except ValueError:
want_level = None
for subject in Emner:
# no need for str(Fag); input by definition returns a string
if want_subj in subject:
if not want_level or int(subject[-3:]) == want_level:
print(*([sub_string] + ([Karakterer[sub_string]] if sub_string in Karakterer else [])))
更好的解决方案可能是将课程及其级别存储为单独的项目,这样您就不必在需要时解析编号。 (顺便说一句,当您可以轻松地直接定义dict
时,不应该分配给列表,然后重铸为dict
。)
Emner = [("INFO",100),("INFO",104),("INFO",110),("INFO",150),("INFO",125, ("RELV",102)]
FagKoder = {
"INF": "Informasjonsvitenskap",
"Kog": "Kognitiv vitenskap",
"REL": "Religionsvitenskap",
"DIK": "DigitalKultur"
"ECO": "Økonomi"
}
很明显,如何使代码适应这些结构。
(顺便说一句,您在Emner
中似乎有“ RELV”,但在FagKoder
中却有“ REL”。)