Python高级程序设计作业二

部分参考网络,侵删,仅供参考

  1. 建立一个CSV文件,文件名自取打开后见下图,采取字典读写的方法。
  1. 在本练习中,你将创建一个CSV文件反映在活期存款账户上的一系列交易事务,最后把交易列表写进一个Excel文件。
    (1)首先定义一个新的Account类来表示一种银行帐户类型。
    (2)当类被实例化时,您应该提供帐号、账户持有人名称、期初余额和账户类型(可以是“活期”、“存款”或“投资”等的字符串)。
    (3) 为账户提供三种实例方法;存钱(金额),取钱(金额)和余额()。
    (4) Account类还应该保存它所涉及的事务的历史记录。
    (5) 一次交易事务是存款或取款的记录。帐户中的初始金额可以视为初始存款。
    Tips:历史记录可以实现为一个列表,包含一个有序的序列
    交易事务可以被类定义为存钱或取钱方法及其金额。每次存钱取钱的就是一次新的交易事务被放进交易历史列表。
    最后文件打开后形式如下图。
import csv

class Account():
    def __init__(accountnum, UerName, Balance, Actype, Record):
        accountnum.UerName = UerName
        accountnum.Balance = Balance
        accountnum.Actype = Actype
        accountnum.Record = Record

    def deposit(accountnum, money):
        Balance1 = float(accountnum.Balance) + float(money)
        accountnum.Balance=str(round(Balance1, 2))
        result = ['deposit', accountnum.Balance]
        with open('accounts.csv', 'a+',newline='')as f:
            f_csv = csv.writer(f)
            f_csv.writerows([result])

    def withdraw(accountnum, money):
        Balance1 = float(accountnum.Balance) - float(money)
        accountnum.Balance=str(round(Balance1, 2))
        result = ['withdraw', accountnum.Balance]
        with open('accounts.csv', 'a+',newline='')as f:
            f_csv = csv.writer(f)
            f_csv.writerows([result])

    def query_money(accountnum):
        print('你的余额为' + accountnum.Balance + '元')
    
    def updateRecord(accountnum):
        with open('accounts.csv', 'r')as f:
            accountnum.Record = [i for i in csv.reader(f)]


def menu():
    print('=银行存取钱系统=')
    print('1.存款')
    print('2.取款')
    print('3.查余额')
    print('4.退出')

with open('accounts.csv', 'r')as f:
    Record = [i for i in csv.reader(f)]
Account1 = Account('张三', 0.0, '活期',Record)
Account1.updateRecord()
while True:
    menu()
    num = input('请输入要办理的业务:')
    if num == "1":
        money = input('请输入存钱金额:')
        Account1.deposit(money)
        print('存款成功!存入' + money + '元,余额:'+Account1.Balance+'元')
    elif num == "2":
        money = input('请输入取钱金额:')
        Account1.withdraw(money)
        print('取款成功!取出' + money + '元,余额:'+Account1.Balance+'元')
    elif num == "3":
        Account1.query_money()
    elif num == "4":
        Account1.updateRecord()
        break
    else:
        print("输入错误!")
        continue

  1. 开发程序对stock_data.txt进⾏以下操作:一个或两个数字,最后是两个
  2. 1程序启动后,给⽤户提供查询接⼝,允许⽤户复查股票⾏情信息(⽤到循环)
  3. 2 允许⽤户通过模糊查询股票名,⽐如输⼊“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
  4. 3 允许按股票价格、涨跌幅、换⼿率这⼏列来筛选信息,⽐如输⼊“价格>50”则把价格⼤于50的股票
    都打印,输⼊“市盈率<50“,则把市盈率⼩于50的股票都打印,不⽤判断等于。
list_data=[]
#用来判断该列字符串最后一位是不是不是数字。
q_list=[4,5,6,8,10]
#用于处理两列单位不一致的
d_list=[7,11]
#将数据转化成一个列表
with open('stock_data.txt','r',encoding='utf-8') as f:
	#股票参数名列表
    list_name=f.readline().strip('\n').split(',')
    for line in f:
        line = line.strip('\n')
        list_data.append(line.split(','))
while True:
    s= input("股票查询接口>>").strip()
    print(list_name)
    if '>' in s:
        #命令分割
        index= s.index('>')
        name=s[0:index]
        date=s[index+1:]
        #获取所查的列数
        l_index=list_name.index(name)
        #处理列有百分号的情况
        if l_index in q_list:
                for l in list_data:
                    try:
                        if float(l[l_index][0:-1]) > float(date):
                            print(l)

                    except ValueError as e:
                        continue
            #处理两列单位不同的情况
        elif l_index in d_list:
            for l in list_data:
                if '亿' in l[l_index]:
                    if float(l[l_index][0:-1]) * 10000 > float(date):
                        print(l)

                if float(l[l_index][0:-1]) > float(date):
                    print(l)
        else:
            for l in list_data:
                try:
                    if float(l[l_index]) > float(date):
                        print(l)
                except ValueError as e:
                    continue
    #处理小于情况
    elif '<' in s:
        index = s.index('<')
        name = s[0:index]
        date = s[index + 1:]
        # 获取所查的列数
        l_index = list_name.index(name)
        # 处理列有百分号的情况
        if l_index in q_list:
            for l in list_data:
                try:
                    if float(l[l_index][0:-1]) < float(date):
                        print(l)
                except ValueError as e:
                    continue
        # 处理两列单位不同的情况
        elif l_index in d_list:
            for l in list_data:
                if '亿' in l[l_index]:
                    if float(l[l_index][0:-1]) * 10000 < float(date):
                        print(l)
                if float(l[l_index][0:-1]) < float(date):
                    print(l)
        else:
            for l in list_data:
                try:
                    if float(l[l_index]) < float(date):
                        print(l)
                except ValueError as e:
                    print(l)
    # 模糊查询
    else:
        for l in list_data:
            if s in l[1]:
                print(l)

  1. 编写程序实现用户注册后(注册到文件中register.txt),可以登录(登录信息来自于文件)。
print("-----注册-----")
name = input("账号: ").strip()
pwd = input("密码: ").strip()
with open('register.txt', mode='a', encoding='utf-8') as f:
    f.write('%s:%s\n' % (name, pwd))
print("-----登录-----")
name = input("账号: ").strip()
pwd = input("密码: ").strip()
f.txt = open('register.txt',mode='rt',encoding='utf-8')
for line in f.txt:
    user,pwd=line.strip('\n').split(':')
    if name == user and pwd == pwd:
        print('登录成功')
        break
else:
    print('账号或密码错误')
f.txt.close()
  1. 程序
  2. 1编写一个程序,需要用户输入合法的用户名后,如果提示用户输入他喜欢的数字,并使用json.dump() 将这个数字存储到文件中。再编写一个程序,从文件中读取这个值,并打印消息“I knowyour favorite number! It’s _____.”。
import json
usernumber = input("What is your favorite number? ")
filename = 'usernumber.json'
with open(filename, 'w') as f_obj:
    json.dump(usernumber, f_obj)
import json
filename = 'usernumber.json'
with open(filename, 'r') as f_obj:
    usernumber=json.load(f_obj)
print("I know your favorite number! It’s " + usernumber + ".")

  1. 2记住喜欢的数字:将练习5-1中的两个程序合而为一。如果存储了用户喜欢的数字,就向用户显示它,否则提示用户输入他喜欢的数字并将其存储到文件中。
    运行这个程序两次,看看它是否像预期的那样工作。
import json
filename = 'usernumber.json'
try:
    with open(filename) as f:
        usernumber=json.load(f)
except FileNotFoundError:
    usernumber=input("What is your favorite number? ")
    with open(filename,"w") as f:
        json.dump(usernumber,f)
else:
    print("I know your favorite number! It’s " + usernumber + ".")
  1. 3验证用户:最后一个remember_me.py版本假设用户要么已输入其用户名,要么是首次运行该程序。我们应修改这个程序,以应对这样的情形:当前和最后一次运行该程序的用户并非同一个人。
    为此,在greet_user() 中打印欢迎用户回来的消息前,先询问他用户名是否是对的。如果不对,就调用get_new_username() 让用户输入正确的用户名。
import json
 
def get_stored_username():
	filename='username.json'
	try:
		with open(filename) as file_object:
			username=json.load(file_object)
	except IOError:
		return None
	else:
		return(username)

def get_new_username():
	username=input("username:")
	filename='username.json'
	with open(filename,'w') as file_object:
		json.dump(username,file_object)
	return username

def greet_user():
	username=get_stored_username()
	if username:
		ask=input("Is the name "+username+" right?(y/n)")
		if ask=='y':
			print("Welcome back,"+username+"!")
		else:
			username=get_new_username()
			print("We'll remember you,"+username+"!")
	else:
		username=get_new_username()
		print("We'll remember you,"+username+"!")

greet_user()
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值