最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 模擬購(gòu)物車(chē)的實(shí)例講解

 更新時(shí)間:2017年09月11日 08:03:18   作者:doreimi  
下面小編就為大家?guī)?lái)一篇Python 模擬購(gòu)物車(chē)的實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

1.功能簡(jiǎn)介

此程序模擬用戶登陸商城后購(gòu)買(mǎi)商品操作??蓪?shí)現(xiàn)用戶登陸、商品購(gòu)買(mǎi)、歷史消費(fèi)記查詢、余額和消費(fèi)信息更新等功能。首次登陸輸入初始賬戶資金,后續(xù)登陸則從文件獲取上次消費(fèi)后的余額,每次購(gòu)買(mǎi)商品后會(huì)扣除相應(yīng)金額并更新余額信息,退出時(shí)也會(huì)將余額和消費(fèi)記錄更新到文件以備后續(xù)查詢。

2.實(shí)現(xiàn)方法

架構(gòu):

本程序采用python語(yǔ)言編寫(xiě),將各項(xiàng)任務(wù)進(jìn)行分解并定義對(duì)應(yīng)的函數(shù)來(lái)處理,從而使程序結(jié)構(gòu)清晰明了。主要編寫(xiě)了六個(gè)函數(shù):

(1)login(name,password)

用戶登陸函數(shù),實(shí)現(xiàn)用戶名和密碼驗(yàn)證,登陸成功則返回登陸次數(shù)。

(2)get_balance(name)

獲取用戶余額數(shù)據(jù)。

(3)update_balance(name,balance)

更新用戶余額數(shù)據(jù),當(dāng)用戶按q鍵退出時(shí)數(shù)據(jù)會(huì)更新到文件。

(4)inquire_cost_record(name)

查詢用戶歷史消費(fèi)記錄。

(5)update_cost_record(name,shopping_list)

更新用戶消費(fèi)記錄,當(dāng)用戶按q鍵退出時(shí)本次消費(fèi)記錄會(huì)更新到文件。

(6)shopping_chart()

主函數(shù),完成人機(jī)交互,函數(shù)調(diào)用,各項(xiàng)功能的有序?qū)崿F(xiàn)。

主要操作:

(1)根據(jù)提示按數(shù)字鍵選擇相應(yīng)選項(xiàng)進(jìn)行操作。

(2)任意時(shí)刻按q鍵退出退出登陸,退出前會(huì)完成用戶消費(fèi)和余額信息更新。

使用文件:

(1)userlist.txt

存放用戶賬戶信息文件,包括用戶名、密碼、登陸次數(shù)和余額。每次用戶登陸成功會(huì)更新該用戶登陸次數(shù),每次按q鍵退出時(shí)會(huì)更新余額信息。

(2)***_cost_record.txt

存放某用戶***消費(fèi)記錄的文件,用戶首次購(gòu)買(mǎi)商品后創(chuàng)建,沒(méi)有購(gòu)買(mǎi)過(guò)商品的用戶不會(huì)產(chǎn)生該文件。每次按q鍵退出時(shí)會(huì)將最新的消費(fèi)記錄更新到文件。

3.流程圖

4.代碼

# Author:Byron Li
#-*-coding:utf-8-*-

'''----------------------------------------------使用文件說(shuō)明----------------------------------------------------------
使用文件說(shuō)明
userlist.txt     存放用戶賬戶信息文件,包括用戶名、密碼、登陸次數(shù)和余額
***_cost_record.txt 存放某用戶***消費(fèi)記錄的文件,用戶首次購(gòu)買(mǎi)商品后創(chuàng)建,沒(méi)有購(gòu)買(mǎi)過(guò)商品的用戶不會(huì)產(chǎn)生該文件
---------------------------------------------------------------------------------------------------------------------'''
import os
import datetime

def login(name,password):  #用戶登陸,用戶名和密碼驗(yàn)證,登陸成功則返回登陸次數(shù)
  with open('userlist.txt', 'r+',encoding='UTF-8') as f:
    line = f.readline()
    while(line):
      pos=f.tell()
      line=f.readline()
      if [name,password] == line.split()[0:2]:
        times=int(line.split()[2])
        line=line.replace(str(times).center(5,' '),str(times+1).center(5,' '))
        f.seek(pos)
        f.write(line)
        return times+1
  return None

def get_balance(name):  #獲取用戶余額數(shù)據(jù)
  with open('userlist.txt', 'r',encoding='UTF-8') as f:
    line = f.readline()
    for line in f:
      if name == line.split()[0]:
        return line.split()[3]
  print("用戶%s不存在,無(wú)法獲取其余額信息!"%name)
  return False

def update_balance(name,balance):  #更新用戶余額數(shù)據(jù)
  with open('userlist.txt', 'r+',encoding='UTF-8') as f:
    line = f.readline()
    while(line):
      pos1=f.tell()
      line=f.readline()
      if name == line.split()[0]:
        pos1=pos1+line.find(line.split()[2].center(5,' '))+5
        pos2=f.tell()
        f.seek(pos1)
        f.write(str(balance).rjust(pos2-pos1-2,' '))
        return True
  print("用戶%s不存在,無(wú)法更新其余額信息!" % name)
  return False

def inquire_cost_record(name):   #查詢用戶歷史消費(fèi)記錄
  if os.path.isfile(''.join([name,'_cost_record.txt'])):
    with open(''.join([name,'_cost_record.txt']), 'r',encoding='UTF-8') as f:
      print("歷史消費(fèi)記錄".center(40, '='))
      print(f.read())
      print("".center(46, '='))
      return True
  else:
    print("您還沒(méi)有任何歷史消費(fèi)記錄!")
    return False

def update_cost_record(name,shopping_list):  #更新用戶消費(fèi)記錄
  if len(shopping_list)>0:
    if not os.path.isfile(''.join([name, '_cost_record.txt'])):   #第一次創(chuàng)建時(shí)第一行標(biāo)上“商品 價(jià)格”
      with open(''.join([name, '_cost_record.txt']), 'a',encoding='UTF-8') as f:
        f.write("%-5s%+20s\n" % ('商品', '價(jià)格'))
        f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消費(fèi)記錄']).center(40,'-'))  #寫(xiě)入消費(fèi)時(shí)間信息方便后續(xù)查詢
        f.write('\n')
        for product in shopping_list:
          f.write("%-5s%+20s\n"%(product[0],str(product[1])))
    else:
      with open(''.join([name, '_cost_record.txt']), 'a',encoding='UTF-8') as f:
        f.write(''.join([datetime.datetime.now().strftime('%c'), ' 消費(fèi)記錄']).center(40, '-'))
        f.write('\n')
        for product in shopping_list:
          f.write("%-5s%+20s\n"%(product[0],str(product[1])))
    return True
  else:
    print("您本次沒(méi)有購(gòu)買(mǎi)商品,不更新消費(fèi)記錄!")
    return False

def shopping_chart():  #主函數(shù),用戶交互,函數(shù)調(diào)用,結(jié)果輸出
  product_list=[
    ('Iphone',5000),
    ('自行車(chē)',600),
    ('聯(lián)想電腦',7800),
    ('襯衫',350),
    ('洗衣機(jī)',1000),
    ('礦泉水',3),
    ('手表',12000)
  ]  #商店商品列表
  shopping_list=[]  #用戶本次購(gòu)買(mǎi)商品列表
  while(True):
    username = input("請(qǐng)輸入用戶名:")
    password = input("請(qǐng)輸入密碼:")
    login_times=login(username,password)  #查詢輸入用戶名和密碼是否正確,正確則返回登陸次數(shù)
    if login_times:
      print('歡迎%s第%d次登陸!'.center(50,'*')%(username,login_times))
      if login_times==1:
        balance = input("請(qǐng)輸入工資:")  #第一次登陸輸入賬戶資金
        while(True):
          if balance.isdigit():
            balance=int(balance)
            break
          else:
            balance = input("輸入工資有誤,請(qǐng)重新輸入:")
      else:
        balance=int(get_balance(username)) #非第一次登陸從文件獲取賬戶余額
      while(True):
        print("請(qǐng)選擇您要查詢消費(fèi)記錄還是購(gòu)買(mǎi)商品:")
        print("[0] 查詢消費(fèi)記錄")
        print("[1] 購(gòu)買(mǎi)商品")
        choice=input(">>>")
        if choice.isdigit():
          if int(choice)==0:         #查詢歷史消費(fèi)記錄
            inquire_cost_record(username)
          elif int(choice)==1:        #購(gòu)買(mǎi)商品
            while (True):
              for index,item in enumerate(product_list):
                print(index,item)
              choice=input("請(qǐng)輸入商品編號(hào)購(gòu)買(mǎi)商品:")
              if choice.isdigit():
                if int(choice)>=0 and int(choice)<len(product_list):
                  if int(product_list[int(choice)][1])<balance:  #檢查余額是否充足,充足則商品購(gòu)買(mǎi)成功
                    shopping_list.append(product_list[int(choice)])
                    balance = balance - int(product_list[int(choice)][1])
                    print("\033[31;1m%s\033[0m已加入購(gòu)物車(chē)中,您的當(dāng)前余額是\033[31;1m%s元\033[0m" %(product_list[int(choice)][0],balance))
                  else:
                    print("\033[41;1m您的余額只剩%s元,無(wú)法購(gòu)買(mǎi)%s!\033[0m" %(balance,product_list[int(choice)][0]))
                else:
                  print("輸入編號(hào)錯(cuò)誤,請(qǐng)重新輸入!")
              elif choice=='q':   #退出賬號(hào)登陸,退出前打印本次購(gòu)買(mǎi)清單和余額信息,并更新到文件
                if len(shopping_list)>0:
                  print("本次購(gòu)買(mǎi)商品清單".center(50,'-'))
                  for product in shopping_list:
                    print("%-5s%+20s"%(product[0],str(product[1])))
                  print("".center(50, '-'))
                  print("您的余額:\033[31;1m%s元\033[0m"%balance)
                  update_cost_record(username,shopping_list)
                  update_balance(username, balance)
                  print("退出登陸!".center(50, '*'))
                  exit()
                else:
                  print("您本次沒(méi)有消費(fèi)記錄,歡迎下次購(gòu)買(mǎi)!")
                  print("退出登陸!".center(50, '*'))
                  exit()
              else:
                print("選項(xiàng)輸入錯(cuò)誤,請(qǐng)重新輸入!")
          else:
            print("選項(xiàng)輸入錯(cuò)誤,請(qǐng)重新輸入!")
        elif choice=='q':  #退出賬號(hào)登陸
          print("退出登陸!".center(50, '*'))
          exit()
        else:
          print("選項(xiàng)輸入錯(cuò)誤,請(qǐng)重新輸入!")
      break
    else:
      print('用戶名或密碼錯(cuò)誤,請(qǐng)重新輸入!')

shopping_chart() #主程序運(yùn)行

以上這篇Python 模擬購(gòu)物車(chē)的實(shí)例講解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上

    Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上

    這篇文章主要介紹了Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上,本文通過(guò)截圖實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中的pprint折騰記

    Python中的pprint折騰記

    這篇文章主要介紹了Python中的pprint折騰記,本文著重講解pprint的使用,并給出使用實(shí)例,需要的朋友可以參考下
    2015-01-01
  • 快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程

    快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程

    這篇文章主要為大家介紹了Java開(kāi)發(fā)者如何快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • pycharm 使用心得(九)解決No Python interpreter selected的問(wèn)題

    pycharm 使用心得(九)解決No Python interpreter selected的問(wèn)題

    PyCharm 是由JetBrains打造的一款 Python IDE。具有智能代碼編輯器,能理解 Python 的特性并提供卓越的生產(chǎn)力推進(jìn)工具:自動(dòng)代碼格式化、代碼完成、重構(gòu)、自動(dòng)導(dǎo)入和一鍵代碼導(dǎo)航等。這些功能在先進(jìn)代碼分析程序的支持下,使 PyCharm 成為 Python 專(zhuān)業(yè)開(kāi)發(fā)人員和剛起步人員使用的有力工具。
    2014-06-06
  • Python numpy.zero() 初始化矩陣實(shí)例

    Python numpy.zero() 初始化矩陣實(shí)例

    今天小編就為大家分享一篇Python numpy.zero() 初始化矩陣實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • Python selenium 父子、兄弟、相鄰節(jié)點(diǎn)定位方式詳解

    Python selenium 父子、兄弟、相鄰節(jié)點(diǎn)定位方式詳解

    這篇文章主要介紹了Python selenium 父子、兄弟、相鄰節(jié)點(diǎn)定位方式詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • 基于Python編寫(xiě)個(gè)自用的內(nèi)存清理工具

    基于Python編寫(xiě)個(gè)自用的內(nèi)存清理工具

    自己電腦經(jīng)常內(nèi)存飆升卻不知道是什么進(jìn)程引起的,但是按傳統(tǒng)辦法點(diǎn)開(kāi)任務(wù)管理器去排個(gè)序來(lái)查看太發(fā)麻了,所以本文就來(lái)用Python編寫(xiě)一個(gè)內(nèi)存清理工具吧
    2025-02-02
  • python之消除前綴重命名的方法

    python之消除前綴重命名的方法

    今天小編就為大家分享一篇python之消除前綴重命名的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python 實(shí)現(xiàn)邏輯回歸

    python 實(shí)現(xiàn)邏輯回歸

    這篇文章主要介紹了python 實(shí)現(xiàn)邏輯回歸的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python中集合的創(chuàng)建及常用函數(shù)的使用詳解

    Python中集合的創(chuàng)建及常用函數(shù)的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Python中集合的創(chuàng)建、使用和遍歷,集合常見(jiàn)的操作函數(shù),集合與列表,元組,字典的嵌套,感興趣的小伙伴可以了解一下
    2022-06-06

最新評(píng)論

手机| 册亨县| 邹平县| 东阿县| 紫云| 永登县| 合川市| 邹城市| 甘德县| 正安县| 中卫市| 游戏| 潍坊市| 盱眙县| 峨山| 惠水县| 东海县| 确山县| 海晏县| 霸州市| 夏津县| 修水县| 龙南县| 正阳县| 大冶市| 博爱县| 宜良县| 墨玉县| 神池县| 厦门市| 宜兰市| 环江| 墨玉县| 泽普县| 抚松县| 怀远县| 宜良县| 济阳县| 甘洛县| 桐梓县| 应城市|