How do I take the name of a customer and a list of customers as the two parameters for a function that would be written next called search()?
其思想是函数"search()"应该以客户的名称和客户列表作为参数,检查客户是否在customer.txt中(然后返回true),然后返回false。
规范为:1)以客户名称和客户列表(writedata(),customer.txt制作的列表)为参数2)检查名称是否在列表中3)如果在列表中,则返回true;如果不在列表中,则返回false。
目前,1)每当我在菜单中键入s时,它会告诉我它缺少两个必需的位置参数
Traceback (most recent call last):
1
2
3
4
5
6 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()",它会说"name"search"没有定义",在调用"cdman()"之前和之后都是如此。
3)如果我在文件中使用"jacob walker"这个名称并尝试搜索它,它将突出显示walker并说无效语法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | def cdman(): def menu(): print('*------------------------*') print('| Customer Database Menu |') print('*------------------------* ') choice = input('D: Create/Update Customer Data R: Display Database S: Search for User E: End Program ') 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 + ' ') 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() |
您的问题是,您试图调用函数
这个堆栈溢出问题对python函数参数有很多深入的解释,这将是一个有帮助的阅读,以及本文。为了解决您遇到的错误,有两个基本的解决方案。
第一个解决方案(根据代码的功能,这更有用)是实际传递参数。你在哪里
1 2 3 | elif choice == 'S': search() menu() |
你应该告诉它要搜索什么,也就是说。
1 2 3 | elif choice == 'S': search('Bob', 'customer.txt') menu() |
您还可以给出参数的默认值,其现在的写入方式
1 | def search(name, filename): |
它期望接收这些值,否则将无法定义这些值(您正在运行的错误)
您可以告诉它默认值,并处理没有传递任何内容的情况,如:
1 2 3 4 5 6 7 | def search(name=None, filename='customer.txt'): if name is None: print('No name provided!') elif name in open(filename).read(): print('True') else: print('False') |
首先,在没有参数的代码中调用
所以,在输入s之后,您的程序需要一个
1 2 3 | elif choice == 'S': search(CustomerName, FileName) menu() |
我想你的
1 2 3 4 5 6 7 8 9 | def search(CustomerName, filename): with open(filename,"r") as fp: Customer_Names = [name.rstrip(' ') for name in fp.readlines()] for AvailableName in Customer_Names: if AvailableName == CustomerName: print True else: print False |