部分参考网络,侵删,仅供参考
- 建立一个CSV文件,文件名自取打开后见下图,采取字典读写的方法。
无
- 在本练习中,你将创建一个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
- 开发程序对stock_data.txt进⾏以下操作:一个或两个数字,最后是两个
- 1程序启动后,给⽤户提供查询接⼝,允许⽤户复查股票⾏情信息(⽤到循环)
- 2 允许⽤户通过模糊查询股票名,⽐如输⼊“啤酒”, 就把所有股票名称中包含“啤酒”的信息打印出来
- 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)
- 编写程序实现用户注册后(注册到文件中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编写一个程序,需要用户输入合法的用户名后,如果提示用户输入他喜欢的数字,并使用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 + ".")
- 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 + ".")
- 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()