关于#input#的问题,如何解决?(语言-python)


import csv

class Book:
    def __init__(self, bNo, bName, bClass, bPublic, bAuthor, bPrice, bNum, bDate):
        self.bNo = bNo
        self.bName = bName
        self.bClass = bClass
        self.bPublic = bPublic
        self.bAuthor = bAuthor
        self.bPrice = bPrice
        self.bNum = bNum
        self.bDate = bDate

class Borrow:
    def __init__(self, bNo, rNo, bDate, rDate):
        self.bNo = bNo
        self.rNo = rNo
        self.bDate = bDate
        self.rDate = rDate

class Reader:
    def __init__(self, rNo, rPwd, rName, rDept, rSex, rTel, rRole):
        self.rNo = rNo
        self.rPwd = rPwd
        self.rName = rName
        self.rDept = rDept
        self.rSex = rSex
        self.rTel = rTel
        self.rRole = rRole

class BookManager:
    def __init__(self, filename):
        self.filename = 'C:/Users/Desktop/python期末大作业2022.2/book.txt'
        self.books = []
        self.load_books()
    
    def load_books(self):
        with open(self.filename, 'r', encoding='utf-8') as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                book = Book(*row)
                self.books.append(book)
    
    def save_books(self):
        with open(self.filename, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            for book in self.books:
                writer.writerow([book.bNo, book.bName, book.bClass, book.bPublic, book.bAuthor,
                                 book.bPrice, book.bNum, book.bDate])
    #添加书籍
    def add_book(self, book):
        self.books.append(book)
        self.save_books()
    
    def update_book(self, bNo, new_book):
        for i, book in enumerate(self.books):
            if book.bNo == bNo:
                self.books[i] = new_book
                self.save_books()
                return True
        return False
    #删除书籍
    def delete_book(self, bNo):
        for i, book in enumerate(self.books):
            if book.bNo == bNo:
                del self.books[i]
                self.save_books()
                return True
        return False
    
    def query_book(self, bNo):
        for book in self.books:
            if book.bNo == bNo:
                return book
        return None
    
    def browse_books(self):
        for book in self.books:
            print(f"{book.bNo} | {book.bName} | {book.bClass} | {book.bPublic} | {book.bAuthor} | {book.bPrice} | {book.bNum} | {book.bDate}")

class BorrowManager:
    def __init__(self, filename):
        self.filename = "C:/Users/Desktop/python期末大作业2022.2/borrow.txt"
        self.borrows = []
        self.load_borrows()
    
    def load_borrows(self):
        with open(self.filename, 'r', encoding='utf-8') as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                borrow = Borrow(*row)
                self.borrows.append(borrow)
    
    def save_borrows(self):
        with open(self.filename, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            for borrow in self.borrows:
                writer.writerow([borrow.bNo, borrow.rNo, borrow.bDate, borrow.rDate])
    
    def add_borrow(self, borrow):
        self.borrows.append(borrow)
        self.save_borrows()
    
    def browse_borrows(self):
        for borrow in self.borrows:
            print(f"{borrow.bNo} | {borrow.rNo} | {borrow.bDate} | {borrow.rDate}")

class ReaderManager:
    def __init__(self, filename):
        self.filename = "C:/Users/Desktop/python期末大作业2022.2/reader.txt"
        self.readers = []
        self.load_readers()
    
    def load_readers(self):
        with open(self.filename, 'r', encoding='utf-8') as csvfile:
            reader = csv.reader(csvfile)
            for row in reader:
                reader = Reader(*row)
                self.readers.append(reader)
    
    def save_readers(self):
        with open(self.filename, 'w', newline='', encoding='utf-8') as csvfile:
            writer = csv.writer(csvfile)
            for reader in self.readers:
                writer.writerow([reader.rNo, reader.rPwd, reader.rName, reader.rDept, reader.rSex,
                                  reader.rTel, reader.rRole])
    
    def add_reader(self, reader):
        self.readers.append(reader)
        self.save_readers()
    
    def update_reader(self, rNo, new_reader):
        for i, reader in enumerate(self.readers):
            if reader.rNo == rNo:
                self.readers[i] = new_reader
                self.save_readers()
                return True
        return False
    
    def delete_reader(self, rNo):
        for i, reader in enumerate(self.readers):
            if reader.rNo == rNo:
                del self.readers[i]
                self.save_readers()
                return True
        return False
    
    def query_reader(self, rNo):
        for reader in self.readers:
            if reader.rNo == rNo:
                return reader
        return None
    
    def browse_readers(self):
        for reader in self.readers:
            print(f"{reader.rNo} | {reader.rName} | {reader.rDept} | {reader.rSex} | {reader.rTel} | {reader.rRole}")

def add_book_menu(manager):
    bNo = input("请输入书号:")
    bName = input("请输入书名:")
    bClass = input("请输入类别:")
    bPublic = input("请输入出版社:")
    bAuthor = input("请输入作者:")
    bPrice = input("请输入定价:")
    bNum = input("请输入数量:")
    bDate = input("请输入购买日期:")
    book = Book(bNo, bName, bClass, bPublic, bAuthor, bPrice, bNum, bDate)
    manager.add_book(book)
    print("添加图书成功!")

def update_book_menu(manager):
    bNo = input("请输入要修改的图书的书号:")
    book = manager.query_book(bNo)
    if book is None:
        print("未找到对应的图书!")
        return
    bName = input(f"请输入新的书名(原书名:{book.bName}):")
    bClass = input(f"请输入新的类别(原类别:{book.bClass}):")
    bPublic = input(f"请输入新的出版社(原出版社:{book.bPublic}):")
    bAuthor = input(f"请输入新的作者(原作者:{book.bAuthor}):")
    bPrice = input(f"请输入新的定价(原定价:{book.bPrice}):")
    bNum = input(f"请输入新的数量(原数量:{book.bNum}):")
    bDate = input(f"请输入新的购买日期(原购买日期:{book.bDate}):")
    new_book = Book(bNo, bName, bClass, bPublic, bAuthor, bPrice, bNum, bDate)
    if manager.update_book(bNo, new_book):
        print("修改图书成功!")
    else:
        print("修改图书失败!")

def delete_book_menu(manager):
    bNo = input("请输入要删除的图书的书号:")
    if manager.delete_book(bNo):
        print("删除图书成功!")
    else:
        print("删除图书失败!")

def query_book_menu(manager):
    bNo = input("请输入要查询的图书的书号:")
    book = manager.query_book(bNo)
    if book is None:
        print("未找到对应的图书!")
    else:
        print(f"{book.bNo} | {book.bName} | {book.bClass} | {book.bPublic} | {book.bAuthor} | {book.bPrice} | {book.bNum} | {book.bDate}")

def browse_book_menu(manager):
    manager.browse_books()

def main_menu():
    book_manager = BookManager('book.csv')
    borrow_manager = BorrowManager('borrow.csv')
    reader_manager = ReaderManager('reader.csv')
    
    while True:
        print("======== 图书管理系统 =======")
        print("1. 添加图书")
        print("2. 修改图书")
        print("3. 删除图书")
        print("4. 查询图书")
        print("5. 浏览图书")
        print("0. 退出系统")
        choice = input("请选择操作:")
        
        if choice == '1':
            add_book_menu(book_manager)
        elif choice == '2':
            update_book_menu(book_manager)
        elif choice == '3':
            delete_book_menu(book_manager)
        elif choice == '4':
            query_book_menu(book_manager)
        elif choice == '5':
            browse_book_menu(book_manager)
        elif choice == '0':
            break
        else:
            print("输入有误,请重新输入!")

if __name__ == '__main__':
    main_menu()

img

这个报错到底是什么意思,最近写代码老是遇到?为什么会显示我没有参数?能给我详细的解决方案吗?
这是各txt文件详情

img

修改意见
1,把下面.csv文件改成对应的.txt文件
def main_menu():


    book_manager = BookManager('book.csv')
    borrow_manager = BorrowManager('borrow.csv')
    reader_manager = ReaderManager('reader.csv')
,,,,,,,,,,,,
```python
改成:
def main_menu():
    book_manager = BookManager("./book.txt")
    borrow_manager = BorrowManager("./borrow.txt")
    reader_manager = ReaderManager("./reader.txt")
,,,,,,,,,,,,,



2.三个class的初始化改为如此
class ReaderManager:
    readers = []
    def __init__(self, filename):
        self.filename = filename
——————————————————————————————————————————————
class BorrowManager:
    borrows = []
    def __init__(self, filename):
        self.filename = filename
——————————————————————————
class BookManager:
    books = []
    def __init__(self, filename):
        self.filename = filename
3.问题解决,不要白嫖!


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/844299665686121.png "#left")

应该就是解析文件时没有转化为程序需要的合适,所以提示参数不够,实际上是没有获取到

{"book_id":"001","book_name":"三体","book_loc":"0-0-1"}
{"book_id":"002","book_name":"三体","book_loc":"0-0-2"}
我想问,是不是这些txt文件里的内容与代码的读取方式不同,就必须要像上述格式一样,代码才会读取到吗?如果是这样的,那我要怎么修改,才能改变代码读取方式呢,让他以行顺序读取,以空格为间断符?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7736798
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:如何用python按照txt序列号批量转移文件?
  • 除此之外, 这篇博客: python二级考试细节整理中的 《侠客行》是金庸的重要武侠作品之一,主要叙述一个懵懂少年石破天的江湖经历。这里给出一个《侠客行》的网络版本,文件名为“侠客行-网络版.txt”。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    基础中文字符的Unicode编码范围是[0x4e00,0x9fa5],请统计给定文本中存在多少该范围内的基础中文字符以及每个字符的出现次数。以如下模式(CSV格式)保存在“侠客行-字符统计.txt”文件中。
    侠(0x4fa0):888, 客(0x5ba2):666, 行(0x884c):111
    (略)

    fi = open("侠客行-网络版.txt", "r", encoding='utf-8')
    fo = open("侠客行-字符统计.txt", "w", encoding='utf-8')
    txt = fi.read()
    d = {}
    for c in txt:
        if 0x4e00 <= ord(c) <= 0x9fa5:  #ord只是把字符转为十进制的unicode编码
            d[c] = d.get(c, 0) + 1
    ls = []
    for key in d:
        ls.append("{}(0x{:x}):{}".format(key, ord(key),d[key])) #需要转为16进制 也可用hex,hex会有0x头, {:x}则无头
    fo.write(",".join(ls))
    fi.close()
    fo.close()
    
    
  • 您还可以看一下 赵帅老师的Python爬虫基础&商业案例实战课程中的 批量生成舆情报告准备知识点:自动生成txt文件小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题解答:

    在Python中使用input函数接收用户输入时,遇到参数错误的情况,一般是因为传入参数格式不正确或者缺少必要的参数导致的。这时候,我们需要检查代码中传入input函数的参数,保证输入格式正确。

    例如,在以上参考资料的代码中,我们可以以列表或者元组形式在调用函数时将输入的参数传递给函数,如下:

    x = eval(input())   #将输入的字符串通过eval()去掉引号,变成元组类型
    x = list(x)         #将元组类型转换成列表类型
    print(type(x))      #打印看下此时的数据类型:列表类型
    print(x)            #打印出来看看
    print(cmul(*x))     #用*号把列表中元素变成可变参数传给cmul()函数,结果正确
    

    这里使用了*号,将列表中的元素一一提取,再传递给函数进行运算,避免了因为缺少必要参数或者传入参数格式不正确导致的错误。

    此外,在Python中使用input函数接收用户输入时,也可以对输入字符串进行操作,将字符串转换为合适的格式,再传入函数进行计算。例如,当需要输入两个数字并进行比较时,我们可以先将输入的字符串按照空格拆分成列表,再将元素转换成整数进行比较,避免了因为字符串类型无法直接进行比较运算而导致的错误:

    str = input()
    li = str.split(' ')  #以空格为条件,将字符串拆分成列表
    #将变量转换为整型,进行比较
    if (int)li[0] < (int)li[1]:
        print((int)li[0], (int)li[1], sep=' ')
    else:
        print((int)li[1], (int)li[0], sep=' ')
    

    总之,遇到Python中input函数参数错误的情况,可以从检查输入格式、传入必要参数、转换数据类型等方面入手,逐一排查问题并解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^