所以我有一个带有ID,学生姓名和其他属性的txt文件。我被要求通过要求用户只输入他们的ID或他们的名字来为用户提供从文件中删除学生的选项。什么好主意吗?
ID Name
。("102","迈克尔•杰克逊","3","54"、"30","84")
def getlist():
fp = open("student.txt", "r")
list = fp.readlines()
for i in range(len(list)):
list[i] = list[i].split(";")
return list
print("removing Students from the class based on")
print("1-IDt2-Student Name")
fp=open("student.txt","r")
list = getlist()
c=int(input("Enter your choice:"))
if(c==1):
a=int(input("Enter the ID to remove:"))
for i in range(1,len(list)):
if a==int(list[i][0]):
list.remove(list[i])
else:
b=input("Enter the Student name to remove")
print("Records found under the name"+"("+b+")")
for i in range(len(list)):
if b==list[i][1]:
print(list[i],end=" ")
print("n")
####this is for students with the same name
z=int(input("Please select which record ID to remove:"))
for i in range(1,len(list)):
#print(i)
if z==int(list[i][0]):
list.remove(list[i])
break
项目基本完成。您只需要创建一个函数来保存文件。
的评论:
-
将
getlist
重命名为load_records
。"get"是指直接的事物;"load"就是你拿新东西的时候。重命名"list";records"(或"瞳孔"或"db"),因为它更具描述性(将变量命名为"列表"(不管怎样,这都不是一个好主意,因为它是一个内置函数的名称)。 -
将
a
,b
,z
重命名为name
,id
。 -
也有
save_records
。 -
尽量不要使用
for i in range(len(list))
样式
。,而不是:
list = fp.readlines()
for i in range(len(list)):
list[i] = list[i].split(";")
return list
:
list = []
for line in fp:
list.append(line.split(';'))
return list
(更有经验的程序员会把这个函数写成:
)def load_records():
with open("student.txt") as f:
return [ line.split(';') for line in f ]
)
类似地,而不是:
for i in range(len(list)): if b==list[i][1]: print(list[i],end=" ") print("n")
:
for rec in records:
if b == rec[1]:
print(rec, end=" ")
print("n")
(有经验的程序员会直接写print([ rec for rec in records if rec[1] == b ])
)
- 复制删除记录的代码。这可不太好。将删除记录(按ID)的代码移到单独的函数中。