gpt4 book ai didi

python - 搜索列表和打印结果

转载 作者:行者123 更新时间:2023-12-04 09:31:57 25 4
gpt4 key购买 nike

我正在尝试允许用户搜索某人姓名的列表,然后让它打印有关他们的其他详细信息,特别是我正在尝试制作一个医院登记系统,一个非常基本的系统,患者可以在其中输入他们的姓名和症状,他们被赋予一个“患者 ID”,一个 4 位数的代码来识别他们,然后这些都被保存到一个 .txt 文件中供以后检索。但是我希望下一个用户能够搜索此人的姓名并找到他们的 ID,这是我的代码,对于错误的解释,我深表歉意。正如你在最后看到的,我试图想办法解决它,但没有。

import random as rand

def Menu():
boxWidth = 52
print("*" * boxWidth)
print("* Welcome to Cool Hospital *")
print("* If you are a patient, enter 'P', *")
print("* if you are here to see a patient please enter 'V'*")
print("* This system is case sensitive. *")
print("*" * boxWidth)
MenuChoice = input("")
return MenuChoice


MenuChoice = Menu()
if MenuChoice == "P":
f = open("PatientInfo.txt", "a+")
PatientID = rand.randint(1, 10000)
PatientID = str(PatientID)
print("Your patient ID is;", PatientID, ".")
PatientName = input("Please enter your first name.")
f.write(PatientName)
f.write(" ")
f.write(PatientID)
f.write(" ")
f = open("PatientInfo.txt", "r")
print("Entries to the hospital are categorised by their symptoms into either red, amber or green.")
SymptomLevel = input(
"If your symptoms are life threatening type 'R', if they are serious but not life threatening type 'A', "
"if they are mild then enter 'G'.")
f = open("PatientInfo.txt", "a+")
f.write(SymptomLevel)
f.write("\n")

elif MenuChoice == "V":
PatientFinder = input("Please enter the patient's first name.")
f = open("PatientInfo.txt", "r")
with open('PatientInfo.txt') as f:
lines = [line.rstrip() for line in f]
if PatientFinder in lines:
print() ```

最佳答案

这是一个好的开始:您逐行读取文件并将这些行放入一个数组中。所以,如果文件看起来像这样:

patient1 1 G
patient2 2 R
patient3 3 A
然后是您调用的数组 lines会像这样:
lines = ["patient1 1 G", "patient2 2 R", "patient3 3 A"]
所以现在我们要检查作为输入给出的名称是否在其中一行中,不是吗?让我们看看如果我们按照您所做的去做会发生什么:
if PatientFinder in lines:
<some code>
这将检查 PatientFinder 的值是否是数组的一个元素。不幸的是,这并不是我们真正想要的:if PatientFinder将是 patient1 , <some code>不会被执行,因为字符串 "patient1"不是数组的元素。
不,它是数组中项目的一部分!因此,让我们使用 for 循环遍历数组中的所有项目:
for line in lines:
#...
现在, line每次都是文件中的一行。让我们检查该行是否包含患者姓名作为子字符串:
    if PatientFinder in line: # This line contains data for the patient we asked for! 
#...
现在,我们可以做任何我们想做的事情,例如,打印带有该患者信息的行:
        print(line)
好的,让我们看看下面的完整代码!
elif MenuChoice == "V":
PatientFinder = input("Please enter the patient's first name.")
f = open("PatientInfo.txt", "r")
with open('PatientInfo.txt') as f:
lines = [line.rstrip() for line in f]
for line in lines:
if PatientFinder in line: # This line contains data for the patient we asked for!
print(line)
祝你好运!

奖励:如果您喜欢对代码的一些不请自来的反馈,下面我有一些简单的想法:

  • 如您所知,为变量和函数取个好名字很重要,以保持代码清晰。变量和函数的名称以小写开头是一个好习惯,而类和类型的名称应以大写开头。
    这是为了区分类型和该类型的实例。这条规则的使用非常广泛,因此在阅读现有代码时,了解这一点也可能会有所帮助。
    所以Menu会变成menu , MenuChoice -> menuChoice等等。
  • 你告诉用户系统区分大小写,这是真的。如果你想改变它,你可以做 input("").upper() , 它将任何字符串转换为大写(并且当字符串已经完全大写时什么也不做)。
  • 在您的代码中,我看到这两行:
        PatientID = rand.randint(1, 10000)
    PatientID = str(PatientID)
    如果您愿意,可以在一行中完成:
        PatientID = str(rand.randint(1, 10000))
    (顺便说一句,我不确定 randint 是否是最佳选择,因为您得到两倍相同的数字从而得到两个具有相同 ID 的患者的可能性并不太大,这可能是不利的。)
  • 还有这四行:
        f.write(PatientName)
    f.write(" ")
    f.write(PatientID)
    f.write(" ")
    可以这样做:
        f.write(PatientName + " " + PatientID + " ")
  • 在这些行之后,我似乎想念你为什么做这些行:
        f = open("PatientInfo.txt", "r")
    # (...)
    f = open("PatientInfo.txt", "a+")
    我建议仔细检查它们是否有任何目的。

  • 希望这对你有用!

    关于python - 搜索列表和打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62800002/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com