Jupyter仅执行最新函数调用?存款函数余额未累加问题求助
问题分析与修复方案
问题1:Jupyter仅显示最后一次函数调用结果
Jupyter Notebook默认仅自动输出最后一条执行语句的返回值,前两次调用的结果虽已计算,但未被显式输出。解决办法:
- 用
print()包裹前两次调用,强制打印返回结果 - 或把每次调用结果赋值给变量,后续按需输出
示例调整:
print(deposit('Person 2', '8638-2732-9520-2549', 450, 'cash')) print(deposit('Person 3', '2619-4117-9965-7335', 230, 'cash')) deposit('Person 2', '8638-2732-9520-2549', 450, 'cash')
问题2:余额无法累计(Person 2两次存款后余额仍为450)
你的代码存在3个核心逻辑错误:
- 赋值运算符误用:用
==(比较运算符)替代=(赋值运算符),导致账户号、余额的更新完全没有生效:# 错误写法:仅做比较,未赋值 bf.loc[person_name, 'Account Number'] == account_num # 正确写法 bf.loc[person_name, 'Account Number'] = account_num - 未将新余额写回DataFrame:计算出
new_bal后,没有把值存回bf.loc[person_name, 'Balance'],导致每次计算都读取初始余额。 - bank_cash局部初始化:每次调用
cash方法时,bank_cash = 0都会重置为0,无法累计银行现金总量(如需全局累计,应定义为全局变量或类属性)。 - check分支无返回值:
elif method == 'check'块没有return语句,调用该分支会返回None。
修正后的代码
"""add getTime and checkTime functions right before bf.loc and after ifs""" # 假设bf是预先定义好的pandas DataFrame def deposit(person_name, account_num, dep_amount, method): # 确保用户存在于DataFrame,不存在则初始化账户 if person_name not in bf.index: bf.loc[person_name] = {'Account Number': account_num, 'Balance': 0} else: bf.loc[person_name, 'Account Number'] = account_num available_bal = bf.loc[person_name, 'Balance'] new_bal = available_bal + dep_amount # 将新余额写回DataFrame,实现累计 bf.loc[person_name, 'Balance'] = new_bal if method == 'cash': # 用全局变量累计银行现金(或改用类结构管理状态) global bank_cash bank_cash += dep_amount return new_bal, bank_cash elif method == 'check': # 为check分支添加返回值 return new_bal # 初始化全局银行现金变量 bank_cash = 0 # 调用并显式输出结果 print(deposit('Person 2', '8638-2732-9520-2549', 450, 'cash')) print(deposit('Person 3', '2619-4117-9965-7335', 230, 'cash')) print(deposit('Person 2', '8638-2732-9520-2549', 450, 'cash'))
修正说明
- 增加用户存在性检查,避免读取不存在的索引报错
- 修复赋值运算符错误,确保账户信息和余额能正确更新
- 使用
global关键字实现银行现金的全局累计(或改用类来封装状态更规范) - 为
check分支补充返回值,避免无意义的None返回 - 调用时用
print()显式输出每次结果,解决Jupyter仅显示最后一次的问题
内容的提问来源于stack exchange,提问作者tnguyen8935
相关产品推荐
相关产品推荐

