目录
一、准备工作
二、转换思想
三、功能实现
首页 后端开发 Python教程 Python的实战小项目之银行系统的实现

Python的实战小项目之银行系统的实现

Oct 26, 2018 pm 06:02 PM
python

本篇文章给大家带来的内容是介绍Python的实战小项目之银行系统的实现。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石。下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办业务时候会有个自助的ATM机,现在大部分业务都是由他来解决的。首先自己想一想,用面向对象的思想该怎样实现这个系统呢?都有哪些对象?他们各自的功能都有什么?想到的越多越好,在实现的时候,碰到一个问题解决一个问题,过程当中问题很多,也不是很容易解决,不过也就是这样的过程才能学到新的东西。

一、准备工作

  首先走进银行的大门,会有工作人员来询问需要办理什么业务,当然得实话实说了,不过这个和系统没什么关系(* ̄︶ ̄)。接下来,如果要办理的业务是比较大众化的,可以在机器上完成,那么她就会带着我们到一个庞大的小机器旁边。前面他还需要操作几下,来让机器可以为我们工作,有时可以见到招呼一个更高级的员工来输下指纹。这些我们可以理解为管理员来启动系统(有些人是不是觉得哪有这么麻烦,主要我这里说的是银行里面那几台功能比较全的,不单单是简单的自动取款机)。

  接下来该办理我们的业务了,都有哪些业务呢?先列举一些:查余额,存款,取款,转账,改个密码,还可以挂失锁卡,对应还能解锁,把最基本的忘记了,没有办卡哪有这些操作呢,开户也得算上,补卡,销户等等。

  到这里了,我们和实际情况相比没有实体的卡,所以会有一些差异。剩下的过程中想到了再说。

二、转换思想

前面大概确定了需要实现的功能,最终我们还是要写成代码,所以得从编程的思想来考虑那些需求。

首先要考虑这个系统中有哪些对象,从人到银行的ATM机都有哪些事物。人,银行卡,ATM机,这三个是必须有的了,还需要什么,开始办理业务时候那个帮我们操作的人有很多和我们用户不一样的操作,把他也当做一个对象。

人。人这个对象有哪些属性呢?人有自己的一些信息,还有银行卡,剩下要办理的业务我们人为的给定。

卡。卡也有本身的一些信息。

ATM。atm机的功能就要多一些了,首先就是上面整理出来的那些存取款等等的功能,他都得实现。除此之外还有个工作人员对他的操作,他也得处理一下。

工作人员。他们有启用和关闭这个系统的权利。

大体方向有了,剩下的就一点点的完善。

三、功能实现

先从简单的开始,前面说到,客户和卡的属性还是比较单纯的,那就先把他们解决了。

# 银行卡:卡号,卡的密码,余额
class Card(object):
def __init__(self, cardId, cardPasswd, cardMoney):
  self.cardId = cardId
  self.cardPasswd = cardPasswd
  self.cardMony = cardMoney
登录后复制
 # 客户:姓名,身份证号,手机号,银行卡(性别年龄那些只是多了个属性,操作时一样的,就不多写了)
 class User(object):
     def __init__(self, name, idCard, phone, card):
         self.name = name
         self.idCard = idCard
         self.phone = phone
         self.card = card
登录后复制

以上两个类是对银行卡的客户的一个初始化,里面都是列写了一下必要的属性,比如补卡得用身份证,这里通过身份证号代替,等等。其中人的属性里的卡就是上面定义的卡,人的这一个卡属性就包括卡的内部几个属性。

接下来写一下管理员的功能:

  import time
  
  class Admin(object):
      # 为管理员设置个账号密码,为了不随便让人能操作一些危险的内容。
      admin = "1"
      passwd = "1"
      
      # 我们把初始的界面就放在管理员的类里了,他是第一个操作这个机器的嘛
      def printAdminView(self):
         print("****************************************************")
         print("*                                                  *")
         print("*                                                  *")
         print("*               欢迎登陆银行                       *")
         print("*                                                  *")
         print("*                                                  *")
         print("****************************************************")
 
     def printSysFunctionView(self):
         print("****************************************************")
         print("*         开户(1)            查询(2)            *")
        print("*         取款(3)            存款(4)            *")
         print("*         转账(5)            改密(6)            *")
        print("*         锁定(7)            解锁(8)            *")
        print("*         补卡(9)            销户(0)            *")
         print("*                    退出(q)                     *")
         print("****************************************************")
 
     # 这里就是开始时候得验证一下是不是管理员,然后再决定是不是给他这些权利
     def adminOption(self):
         inputAdmin = input("请输入管理员账号:") 
         if self.admin != inputAdmin:
             print("输入账号有误!")
             return -1
         inputPasswd = input("请输入管理员密码:")
         if self.passwd != inputPasswd:
             print("密码输入有误!")
             return -1
 
         # 能执行到这里说明账号密码正确
         print("操作成功,请稍后······")
         time.sleep(2)
         return 0
登录后复制

上面的代码中有个time.sleep(),这个是为了让系统更生动一些,设置的延迟,来模拟系统在大量数据时操作的时延。

前面几个是比较好理解的,现在开始实现我们的系统的功能。这些就放在ATM机的模块里了,有需求就再修改添加策略。

按照上面的那个目录的顺序来,第一个要实现的功能就是开户。开户就得创建出那一系列的属性。并且这些信息我们还需要存储起来,要不然下次再来的时候就发现自己办的卡已经无效了。这些信息可以使用一个键值对来存储,那么key用哪个属性呢。考虑一下,姓名:可能有重名的,身份证号:这个人也许会办不止一张卡,最保险的就是卡号了,不会有卡号相同的吧。那么卡号作为key,其他的个人信息,银行卡信息都存到value中去。现在就在ATM下初始化一个字典(这里还有点问题,稍后再说)。

    def __init__(self, allUsers):
        self.allUsers = allUsers # 用户字典
登录后复制
  # 开户
 def creatUser(self):
     # 目标:向用户字典中添加一对键值对(卡号->用户)
     name = input("请输入您的名字:")
     idCard = input("请输入您的身份证号:")
     phone = input("请输入您的电话号码:")
     prestoreMoney = int(input("请输入预存款金额:"))
     if prestoreMoney < 0:
         print("预存款输入有误!开户失败")
         return -1
 
     onePasswd = input("请设置密码:")

     # 生成银行卡号
     cardStr = self.randomCardId() #生成号码通过一个函数来实现,让这里的逻辑更清晰一点
     card = Card(cardStr, onePasswd, prestoreMoney) # 把卡的信息放到这张卡的对象中
 
     user = User(name, idCard, phone, card) # 个人信息也存入客户的对象中
     # 存到字典
     self.allUsers[cardStr] = user # 这就实现了通过一个银行卡号来索引个人信息以及里面的银行卡属性
     print("开户成功!请记住卡号:" + cardStr)
登录后复制

上面有个生成银行卡没有说,这个其实不难,只要随机生成一组数就可以了,不过这个随机生成的得保证不能和前面已经有的卡号重复了,否则索引就有问题了。

 # 生成卡号
 def randomCardId(self):
     while True:
         str = ""
         for i in range(6):
             ch = chr(random.randrange(ord("0"), ord("9") + 1))
             str += ch
         # 判断是否重复
         if not self.allUsers.get(str): # 这里是通过找一下原来的字典中是否有这个key,如果没有的话那么这个卡号就合法,前面要有个not,没有找到这个卡号那么我们创建这个卡号
             return str
登录后复制

上面已经可以开通一个账户并存储了,不过我们在真正开户时候都需要输入两次密码来确保密码不会不小心输错,其实后面有些功能也需要验证密码。可以再写一个函数来验证密码,以后使用的时候也可以直接调用。

 # 验证密码
 def checkPasswd(self, realPasswd): # 这里传入的参数就是我们第一次输入的密码,下面要检验第一次输入是不是有误
     for i in range(3):
         tempPasswd = input("请输入密码:")
         if tempPasswd == realPasswd:
             return True
     return False
登录后复制

其实后面的一些功能和这个是类似的,这里就不赘述了,先动手试一试,尽量的想的全面些。我会把完整的代码放在最后,可以参考一下。

最终要实现这些功能还是再写一个主程序比较好,更直观,也方便把理清他们之间的关系。首先主程序里需要调用管理员的登录,之后是客户的使用。管理员的登录上面写了,再调用一下就可以。客户的需求需要把每项功能和操作对应起来。先显示出都有哪些功能可以选择,再操作。比如像这样:

  while True:
      admin.printSysFunctionView()
      # 等待用户操作
      option = input("请输入您的操作:")
      if option == "1":
          # print(&#39;开户&#39;)
          atm.creatUser()
      elif option == "2":
          # print("查询")
         atm.searchUserInfo()
     elif option == "3":
         # print("取款")
         atm.getMoney()
     elif option == "4":
         # print("存储")
         atm.saveMoney()
     elif option == "5":
         # print("转账")
         atm.transferMoney()
     elif option == "6":
         # print("改密")
         atm.changePasswd()
     elif option == "7":
         # print("锁定")
         atm.lockUser()
     elif option == "8":
         # print("解锁")
         atm.unlockUser()
     elif option == "9":
         # print("补卡")
         atm.newCard()
     elif option == "0":
         # print("销户")
         atm.killUser()
     elif option == "q":
         # print("退出")
登录后复制

上面这所有的操作,都需要最终长期存储到键值对中,我们这里先用文件来储存,也可以存储到数据库中。既然要长期存储起来,就得把他序列化到磁盘上,使用pickle库。

 # 每次使用前,需要把内容先加载下来
 filepath = os.path.join(os.getcwd(), "allusers.txt")
 f = open(filepath, "rb")
 allUsers = pickle.load(f)
 atm = ATM(allUsers)
 
 # 而在操作结束的时候,要把操作过的内容重新写到磁盘中
 f = open(filepath, "wb")
 pickle.dump(atm.allUsers, f)
 f.close()
登录后复制

到这里就出现了个问题,pickle.load(),当我们第一次使用时里面并没有存储东西,他自然也就不知道我们想要存储什么样格式的内容。所以第一次我们得手动的创建一个空字典,然后将一组信息存进去。下回使用的时候就可以直接load来使用。

在一开始测试的时候记不得里面存储的内容,我就先写了个查看信息的隐藏功能。后来感觉也许银行后台应该也有这样的功能,就没有删掉,虽然是很简单的显示,至少可以体现出他的思想。有兴趣的同学可以做的更好点。

 # 这是上面使用这个功能的入口,并没有显式的展示出来,仅当管理员这样操作时会调用函数
 elif option == "1122332244":
     admin.ban(allUsers)
 
 # 这里是调用函数后显示所有存储的信息的内容
 def ban(self, allUsers):
     for key in allUsers:
         print("账号:" + key + "\n" + "姓名:" + allUsers[key].name + "\n" + "身份证号:" + allUsers[key].idCard + "\n" + "电话号码:" + allUsers[
                 key].phone + "\n" + "银行卡密码:" + allUsers[key].card.cardPasswd + "\n")
登录后复制

上面我只是把系统的其中一部分拿出来解释了一下,需要把里面的功能完善一下。比如把密码验证等等得放到功能里面,还有一些面向对象的操作,需要创建对象,还需要考虑到每个对象之间的关系,比如银行卡的对象作为客户对象的属性,需要通过参数传进去。仔细琢磨一下,把这个系统完成。在下面放上完整的程序,上面东西不是很清晰的话,那就一点一点的看下面的代码,找找感觉。

import time
import random
import pickle
import os


class Card(object):
    def __init__(self, cardId, cardPasswd, cardMoney):
        self.cardId = cardId
        self.cardPasswd = cardPasswd
        self.cardMony = cardMoney
        self.cardLock = False  # 后面到了锁卡的时候需要有个卡的状态


class User(object):
    def __init__(self, name, idCard, phone, card):
        self.name = name
        self.idCard = idCard
        self.phone = phone
        self.card = card


class Admin(object):
    admin = "1"
    passwd = "1"

    def printAdminView(self):
        print("****************************************************")
        print("*                                                  *")
        print("*                                                  *")
        print("*               欢迎登陆银行                       *")
        print("*                                                  *")
        print("*                                                  *")
        print("****************************************************")

    def printSysFunctionView(self):
        print("****************************************************")
        print("*         开户(1)            查询(2)            *")
        print("*         取款(3)            存款(4)            *")
        print("*         转账(5)            改密(6)            *")
        print("*         锁定(7)            解锁(8)            *")
        print("*         补卡(9)            销户(0)            *")
        print("*                    退出(q)                     *")
        print("****************************************************")

    def adminOption(self):
        inputAdmin = input("请输入管理员账号:")
        if self.admin != inputAdmin:
            print("输入账号有误!")
            return -1
        inputPasswd = input("请输入管理员密码:")
        if self.passwd != inputPasswd:
            print("密码输入有误!")
            return -1

        # 能执行到这里说明账号密码正确
        print("操作成功,请稍后······")
        time.sleep(2)
        return 0

    def ban(self, allUsers):
        for key in allUsers:
            print("账号:" + key + "\n" + "姓名:" + allUsers[key].name + "\n" + "身份证号:" + allUsers[key].idCard + "\n" + "电话号码:" + allUsers[
                key].phone + "\n" + "银行卡密码:" + allUsers[key].card.cardPasswd + "\n")


class ATM(object):
    def __init__(self, allUsers):
        self.allUsers = allUsers # 用户字典

    # 开户
    def creatUser(self):
        # 目标:向用户字典中添加一对键值对(卡号->用户)
        name = input("请输入您的名字:")
        idCard = input("请输入您的身份证号:")
        phone = input("请输入您的电话号码:")
        prestoreMoney = int(input("请输入预存款金额:"))
        if prestoreMoney < 0:
            print("预存款输入有误!开户失败")
            return -1

        onePasswd = input("请设置密码:")
        # 验证密码
        if not self.checkPasswd(onePasswd):
            print("输入密码错误,开户失败!")
            return -1

        # 生成银行卡号
        cardStr = self.randomCardId()
        card = Card(cardStr, onePasswd, prestoreMoney)

        user = User(name, idCard, phone, card)
        # 存到字典
        self.allUsers[cardStr] = user
        print("开户成功!请记住卡号:" + cardStr)

    # 查询
    def searchUserInfo(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,查询失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1
        print("账号:%s   余额:%d" % (user.card.cardId, user.card.cardMony))

    # 取款
    def getMoney(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,取款失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        # 开始取款
        amount = int(input("验证成功!请输入取款金额:"))
        if amount > user.card.cardMony:
            print("取款金额有误,取款失败!")
            return -1
        if amount < 0:
            print("取款金额有误,取款失败!")
            return -1
        user.card.cardMony -= amount
        print("您取款%d元,余额为%d元!" % (amount, user.card.cardMony))

    # 存款
    def saveMoney(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,存款失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        # 开始存款
        amount = int(input("验证成功!请输入存款金额:"))
        if amount < 0:
            print("存款金额有误,存款失败!")
            return -1
        user.card.cardMony += amount
        print("您存款%d元,最新余额为%d元!" % (amount, user.card.cardMony))

    # 转账
    def transferMoney(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        # 开始转账
        amount = int(input("验证成功!请输入转账金额:"))
        if amount > user.card.cardMony or amount < 0:
            print("金额有误,转账失败!")
            return -1

        newcard = input("请输入转入账户:")
        newuser = self.allUsers.get(newcard)
        if not newuser:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断是否锁定
        if newuser.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1
        user.card.cardMony -= amount
        newuser.card.cardMony += amount
        time.sleep(1)
        print("转账成功,请稍后···")
        time.sleep(1)
        print("转账金额%d元,余额为%d元!" % (amount, user.card.cardMony))

    # 改密
    def changePasswd(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,改密失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1
        print("正在验证,请稍等···")
        time.sleep(1)
        print("验证成功!")
        time.sleep(1)

        # 开始改密
        newPasswd = input("请输入新密码:")
        if not self.checkPasswd(newPasswd):
            print("密码错误,改密失败!")
            return -1
        user.card.cardPasswd = newPasswd
        print("改密成功!请稍后!")

    # 锁定
    def lockUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,锁定失败!")
            return -1
        if user.card.cardLock:
            print("该卡已被锁定,请解锁后再使用其功能!")
            return -1
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,锁定失败!")
            return -1
        tempIdCard = input("请输入您的身份证号码:")
        if tempIdCard != user.idCard:
            print("身份证号输入有误,锁定失败!")
            return -1
        # 锁定
        user.card.cardLock = True
        print("锁定成功!")


    # 解锁
    def unlockUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,解锁失败!")
            return -1
        if not user.card.cardLock:
            print("该卡未被锁定,无需解锁!")
            return -1
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,解锁失败!")
            return -1
        tempIdCard = input("请输入您的身份证号码:")
        if tempIdCard != user.idCard:
            print("身份证号输入有误,解锁失败!")
            return -1
        # 解锁
        user.card.cardLock = False
        print("解锁成功!")

    # 补卡
    def newCard(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在!")
            return -1
        tempname = input("请输入您的姓名:")
        tempidcard = input("请输入您的身份证号码:")
        tempphone = input("请输入您的手机号码:")
        if tempname != self.allUsers[cardNum].name\
                or tempidcard != self.allUsers.idCard\
                or tempphone != self.allUsers.phone:
            print("信息有误,补卡失败!")
            return -1
        newPasswd = input("请输入您的新密码:")
        if not self.checkPasswd(newPasswd):
            print("密码错误,补卡失败!")
            return -1
        self.allUsers.card.cardPasswd = newPasswd
        time.sleep(1)
        print("补卡成功,请牢记您的新密码!")

    # 销户
    def killUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUsers.get(cardNum)
        if not user:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定!请解锁后再使用其功能!")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardPasswd):
            print("密码输入有误,该卡已锁定!请解锁后再使用其功能!")
            user.card.cardLock = True
            return -1

        del self.allUsers[cardNum]
        time.sleep(1)
        print("销户成功,请稍后!")

    # 验证密码
    def checkPasswd(self, realPasswd):
        for i in range(3):
            tempPasswd = input("请输入密码:")
            if tempPasswd == realPasswd:
                return True
        return False

    # 生成卡号
    def randomCardId(self):
        while True:
            str = ""
            for i in range(6):
                ch = chr(random.randrange(ord("0"), ord("9") + 1))
                str += ch
            # 判断是否重复
            if not self.allUsers.get(str):
                return str


# 主函数,不在上面的类中
def main():
    # 界面对象
    admin = Admin()

    # 管理员开机
    admin.printAdminView()
    if admin.adminOption():
        return -1

    # 由于一开始文件里并没有数据,不知道要存的是个字典,先存一个,后面再把这个关了
    # allUsers = {}

    # 提款机对象
    filepath = os.path.join(os.getcwd(), "allusers.txt")
    f = open(filepath, "rb")
    allUsers = pickle.load(f)
    atm = ATM(allUsers)

    while True:
        admin.printSysFunctionView()
        # 等待用户操作
        option = input("请输入您的操作:")
        if option == "1":
            # print(&#39;开户&#39;)
            atm.creatUser()
        elif option == "2":
            # print("查询")
            atm.searchUserInfo()
        elif option == "3":
            # print("取款")
            atm.getMoney()
        elif option == "4":
            # print("存储")
            atm.saveMoney()
        elif option == "5":
            # print("转账")
            atm.transferMoney()
        elif option == "6":
            # print("改密")
            atm.changePasswd()
        elif option == "7":
            # print("锁定")
            atm.lockUser()
        elif option == "8":
            # print("解锁")
            atm.unlockUser()
        elif option == "9":
            # print("补卡")
            atm.newCard()
        elif option == "0":
            # print("销户")
            atm.killUser()
        elif option == "q":
            # print("退出")
            if not admin.adminOption():
                # 将当前系统中的用户信息保存到文件当中
                f = open(filepath, "wb")
                pickle.dump(atm.allUsers, f)
                f.close()
                return -1
        elif option == "1122332244":
            admin.ban(allUsers)

        time.sleep(2)

if __name__ == "__main__":
    main()
登录后复制

上面就是整个系统了,其实主要还是思想,模块较多,没有全部解释,如果程序当中有哪里不理解,可以留言讨论。注意上述完整代码主要是供大家了解整个系统,想要实现还需在自己电脑上重新配置,注意那些文件的路径,还有一个存放信息的txt文件,把他搞懂后,相信让他运行起来不难。

以上是Python的实战小项目之银行系统的实现的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

CentOS上PyTorch的GPU支持情况如何 CentOS上PyTorch的GPU支持情况如何 Apr 14, 2025 pm 06:48 PM

在CentOS系统上启用PyTorchGPU加速,需要安装CUDA、cuDNN以及PyTorch的GPU版本。以下步骤将引导您完成这一过程:CUDA和cuDNN安装确定CUDA版本兼容性:使用nvidia-smi命令查看您的NVIDIA显卡支持的CUDA版本。例如,您的MX450显卡可能支持CUDA11.1或更高版本。下载并安装CUDAToolkit:访问NVIDIACUDAToolkit官网,根据您显卡支持的最高CUDA版本下载并安装相应的版本。安装cuDNN库:前

Python vs. JavaScript:社区,图书馆和资源 Python vs. JavaScript:社区,图书馆和资源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

docker原理详解 docker原理详解 Apr 14, 2025 pm 11:57 PM

Docker利用Linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(UnionFS)层叠多个文件系统,只存储差异部分,节省空间并加快速度;3. 守护进程管理镜像和容器,客户端用于交互;4. Namespaces和cgroups实现容器隔离和资源限制;5. 多种网络模式支持容器互联。理解这些核心概念,才能更好地利用Docker。

minio安装centos兼容性 minio安装centos兼容性 Apr 14, 2025 pm 05:45 PM

MinIO对象存储:CentOS系统下的高性能部署MinIO是一款基于Go语言开发的高性能、分布式对象存储系统,与AmazonS3兼容。它支持多种客户端语言,包括Java、Python、JavaScript和Go。本文将简要介绍MinIO在CentOS系统上的安装和兼容性。CentOS版本兼容性MinIO已在多个CentOS版本上得到验证,包括但不限于:CentOS7.9:提供完整的安装指南,涵盖集群配置、环境准备、配置文件设置、磁盘分区以及MinI

CentOS上PyTorch的分布式训练如何操作 CentOS上PyTorch的分布式训练如何操作 Apr 14, 2025 pm 06:36 PM

在CentOS系统上进行PyTorch分布式训练,需要按照以下步骤操作:PyTorch安装:前提是CentOS系统已安装Python和pip。根据您的CUDA版本,从PyTorch官网获取合适的安装命令。对于仅需CPU的训练,可以使用以下命令:pipinstalltorchtorchvisiontorchaudio如需GPU支持,请确保已安装对应版本的CUDA和cuDNN,并使用相应的PyTorch版本进行安装。分布式环境配置:分布式训练通常需要多台机器或单机多GPU。所

CentOS上PyTorch版本怎么选 CentOS上PyTorch版本怎么选 Apr 14, 2025 pm 06:51 PM

在CentOS系统上安装PyTorch,需要仔细选择合适的版本,并考虑以下几个关键因素:一、系统环境兼容性:操作系统:建议使用CentOS7或更高版本。CUDA与cuDNN:PyTorch版本与CUDA版本密切相关。例如,PyTorch1.9.0需要CUDA11.1,而PyTorch2.0.1则需要CUDA11.3。cuDNN版本也必须与CUDA版本匹配。选择PyTorch版本前,务必确认已安装兼容的CUDA和cuDNN版本。Python版本:PyTorch官方支

CentOS上如何更新PyTorch到最新版本 CentOS上如何更新PyTorch到最新版本 Apr 14, 2025 pm 06:15 PM

在CentOS上更新PyTorch到最新版本,可以按照以下步骤进行:方法一:使用pip升级pip:首先确保你的pip是最新版本,因为旧版本的pip可能无法正确安装最新版本的PyTorch。pipinstall--upgradepip卸载旧版本的PyTorch(如果已安装):pipuninstalltorchtorchvisiontorchaudio安装最新

See all articles