这个想法是函数“search()”应该以客户的名字和客户列表作为参数,并检查客户是否在 customer.txt 中(然后返回 True)或不在(然后返回 False)。规范是:1)取一个客户的名字和一个客户列表(writeData(),customer.txt生成的列表)作为参数 2)检查name是否在列表中 3)如果是,返回True ; 如果不是,则返回 False。目前,1) 每当我在菜单中输入 S 时,它都会告诉我缺少两个必需的位置参数回溯(最近一次调用最后一次): cdman() File "test.py", line 55, in cdman menu() File "test.py", line 24, in menu search()TypeError: search() missing 2 required positional arguments: 'name' and 'filename'2)如果我在shell中简单地调用“search()”,它会在首先调用“cdman()”之前和之后显示“名称”搜索“未定义”3)如果我在文件中有名称“ Jacob Walker ”并尝试搜索它,它会突出显示 Walker 并说无效语法def cdman(): def menu(): print('*------------------------*') print('| Customer Database Menu |') print('*------------------------*\n') choice = input('D: Create/Update Customer Data\nR: Display Database\nS: Search for User\nE: End Program\n') if choice == 'D': writeData() menu() elif choice == 'S': search() menu() elif choice == 'R': readData() menu() elif choice == 'E': print('PROGRAM TERMINATED') def writeData(): while True: database = open('customer.txt', 'a') name = input('Name: ') if name == '-1': database.close() return False else: id_num = input('ID: ') database.write('Name: ' + name + ' ') database.write('ID: ' + id_num + '\n') def readData(): database = open('customer.txt', 'r') for line in database: print(line) def search(name, filename): if name in open(filename).read(): print('True') else: print('False') menu()cdman()
2 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
首先,您search()在不带参数的代码中调用该函数,但在其定义中您传递了两个参数。
因此,在键入 'S' 后,您的程序需要一个search(CustomerName, FileName),而不是search()。
elif choice == 'S':
search(CustomerName, FileName)
menu()
我猜您的search()函数无法读取文件中的所有可用行。尝试将以下代码用于您的 search() 函数:
def search(CustomerName, filename):
with open(filename, "r") as fp:
Customer_Names = [name.rstrip('\n') for name in fp.readlines()]
for AvailableName in Customer_Names:
if AvailableName == CustomerName:
print True
else:
print False
添加回答
举报
0/150
提交
取消