money=float(input('请输入一个数:'))
while(money!=0): #原代码中循环里money不会改变,一直是输入数,不为0,死循环。
sum+=money
print('总数是%f,税后是%s'%(sum,sum*(1-0.05)))
money=float(input('请输入一个数:')) #多加一个输入项,一直可以输入,累加,直至输入0为止
print('再见')
强烈建议:所有提问程序问题的童鞋,请直接贴出代码,上图不方便调试。短点还好,长一点的图,估计没多少人会看,太累。有代码可以直接调试。比较方便!
强烈建议:所有提问程序问题的童鞋,请直接贴出代码,上图不方便调试。短点还好,长一点的图,估计没多少人会看,太累。有代码可以直接调试。比较方便!
强烈建议:所有提问程序问题的童鞋,请直接贴出代码,上图不方便调试。短点还好,长一点的图,估计没多少人会看,太累。有代码可以直接调试。比较方便!
三大平台的内核都是主要用C语言写的。不同的语言有不同的跨平台方法。
1、C/C++是通过编译器跨平台,一套代码通过不同平台的编译器编译成可在当前平台运行的二进制程序,然后分发二进制程序到相应平台部署使用,在Windows上使用VC编译的C/C++程序是不能在Linux或者Mac OS上运行的。编写大型的跨平台的C/C++程序,一般都不可避免地会调用到系统相关的接口,比如多线程的实现,各个平台就一样,这个时候就需要程序员针对不同平台进行封装,并且使用条件编译来实现编译差异部分,所以,使用C/C++写跨平台的程序是比较考验程序员的功力的。C/C++语言是“源码级”跨平台,需要“一次编写,到处编译”。
2、Java是通过虚拟机实现的跨平台,平台相关的东西都被虚拟机封装起来的,程序员一般不需要关心。Java程序实现了“一次编译,到处运行”,你在Windows上编译的Java程序可以直接拿到Linux或者Mac OS下运行,当然前提是目标平台上得装了JVM虚拟机。
3、Python这类脚本语言,是通过解释器跨平台的,同样解释器封装了平台相关的东西,脚本类语言不需要编译,解释器直接读源代码解释运行,实现了“一次编写,到处运行”。
C/C++、Java、Python是编译型语言、解释型语言、脚本语言的代表(当然现在这种分类说法已经不太正确了)。其他语言基本都是这三种模式,比如:golang、Rust与C/C++类似;C#与Java类似;Ruby、Perl与Python类似。
import pickle
import time
import os
def cost(fname):
'用于记录花费'
cost_time = time.strftime('%Y-%m-%d')
try:#异常处理机制
cost_deposit = int(input('花销金额:'))
cost_mark = input('花销说明:')
except ValueError:
print('无效的金额')
return # 函数的return类似于循环的break,return提前结束函数。
except (KeyboardInterrupt, EOFError):
print('\nbye-bye')
exit(1)
# 在文件中取出所有的收支记录
with open(fname,'rb') as fobj:
records = pickle.load(fobj)
# 计算最新余额
balance = records[-1][-2] - cost_deposit
# 构建最新一笔收入
record = [cost_time,0,cost_deposit,balance,cost_mark]
# 将收入追加到收支列表中
records.append(record)
# 将最新收支情况写入文件
with open(fname,'wb') as fobj:
pickle.dump(records,fobj)
def save(fname):
save_time = time.strftime('%Y-%m-%d')
try:
save_deposit = int(input('收入金额:'))
save_mark = input('收入说明:')
except ValueError:
print('无效的金额')
return
except (KeyboardInterrupt,EOFError):
print('bye-bye')
exit(1)
with open(fname, 'rb') as fobj:
records = pickle.load(fobj)
balance = records[-1][-2] + save_deposit
record = [save_time,save_deposit,0,balance, save_mark]
records.append(record)
with open(fname, 'wb') as fobj:
pickle.dump(records, fobj)
def query(fname):
'用于查账'
# 打印表头
print(f'{"date":<15}{"save":<8}{"cost":<8}{"balance":<12}{"mark":<50}')
with open(fname,'rb') as fobj:
records = pickle.load(fobj)
for date,cost,save,balance,mark in records:
print(f'{date:<15}{cost:<8}{save:<8}{balance:<12}{mark:<50}')
def menu():
funcs = {'0':cost,'1':save,'2':query}
prompt = '''(0)开销
(1)收入
(2)查询
(3)退出
请选择(0/1/2/3):'''
fname = 'account.data'
if not os.path.exists(fname):
init_data = [[time.strftime('%Y-%m-%d'),0,0,10000,'init_data']]
with open(fname,'wb') as fobj:
pickle.dump(init_data,fobj)
while 1:
try:
choice = input(prompt).strip()
except(KeyboardInterrupt,EOFError):
choice = '3'
if choice not in ['0','1','2','3']:
print('无效输入,重试')
continue
if choice == '3':
print('\nbye_bye')
break
funcs[choice](fname)
if __name__ == '__main__':
menu()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)