如何将客户的名称和客户列表作为下一个函数search()的两个参数



其思想是,函数"search(("应将客户的名称和客户列表作为其参数,并检查客户是否在customer.txt中(然后返回True((然后返回False(。

规范为:1(以客户名称和客户列表(writeData((,customer.txt制作的列表(为参数2(检查名称是否在列表中3(如果在,返回True;否则,返回False。

目前,
1(每当我在菜单中键入S时,它都会告诉我它缺少两个必需的位置参数

Traceback(最后一次调用(:

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并说无效语法

def cdman():
def menu():
print('*------------------------*')
print('| Customer Database Menu |')
print('*------------------------*n')
choice = input('D: Create/Update Customer DatanR: Display DatabasenS: Search for UsernE: End Programn')
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()

您的问题是,您试图调用函数search,而没有传入您告诉它需要的参数(namefilename(

这个堆栈溢出问题对python函数参数有很多深入的解释,对阅读本文和阅读本文都很有帮助。为了解决您遇到的错误,有两种基本解决方案。

第一个解决方案(根据您的代码所做的工作更有用(是实际传递参数。在哪里

elif choice == 'S':
search()
menu()

你应该告诉它要搜索什么,即

elif choice == 'S':
search('Bob', 'customer.txt')
menu()

你也可以给你的参数默认值,它现在写的方式

def search(name, filename):

它期望接收这些值,否则它们将不会被定义(您正在运行的错误(

你可以告诉它默认值,并处理什么都没有传入的情况,比如:

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')

首先,在代码中调用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 

最新更新