Python依据corr与std_mev条件计算induc值无输出无报错问题求助
问题原因
- 打印语句缩进错误:你将
induc系列值的打印逻辑全部放在了else分支的内部代码块中,只有当3个相关系数全部小于0.5、触发else分支时才会执行打印。其余任意if/elif分支匹配成功时,仅会完成induc系列变量的计算,不会执行打印操作,因此看不到对应输出。 - 标准差打印笔误:现有代码中3行标准差打印语句的输出前缀均为
Std MEV 1 =,无法区分第二、第三个标准差的实际取值。
修复方案
将5行print语句的缩进减少一级,移到整个if-elif-else结构的外部,保证任意分支执行完成后都会触发打印;同时修正标准差打印的前缀内容。
修正后代码
import statistics from scipy.stats import pearsonr # 此处省略原有变量list_losses、list_mev1/list_mev2/list_mev3、std_mev1_list/std_mev2_list/std_mev3_list、cur_ls/on2_ls等变量的定义逻辑 corr1,_ = pearsonr(list_losses, list_mev1) print('Pearsons correlation[loss and MEV1]: %.4f' % corr1) corr2,_ = pearsonr(list_losses, list_mev2) print('Pearsons correlation[loss and MEV2]: %.4f' % corr2) corr3,_ = pearsonr(list_losses, list_mev3) print('Pearsons correlation[loss and MEV3]: %.4f' % corr3) ### 计算标准差 std_mev1 = statistics.stdev(std_mev1_list) std_mev2 = statistics.stdev(std_mev2_list) std_mev3 = statistics.stdev(std_mev3_list) print("Std MEV 1 = ",std_mev1) print("Std MEV 2 = ",std_mev2) print("Std MEV 3 = ",std_mev3) if corr1>=0.5 and corr2>=0.5 and corr3>=0.5: induc_cur_ls = cur_ls*(1+std_mev1)*(1+std_mev2)*(1+std_mev3) induc_on2_ls = on2_ls*(1+std_mev1)*(1+std_mev2)*(1+std_mev3) induc_tt2_ls = tt2_ls*(1+std_mev1)*(1+std_mev2)*(1+std_mev3) induc_sx2_ls = sx2_ls*(1+std_mev1)*(1+std_mev2)*(1+std_mev3) induc_nn2_ls = nn2_ls*(1+std_mev1)*(1+std_mev2)*(1+std_mev3) elif corr1>=0.5 and corr2>=0.5 and corr3<0.5: induc_cur_ls = cur_ls*(1+std_mev1)*(1+std_mev2) induc_on2_ls = on2_ls*(1+std_mev1)*(1+std_mev2) induc_tt2_ls = tt2_ls*(1+std_mev1)*(1+std_mev2) induc_sx2_ls = sx2_ls*(1+std_mev1)*(1+std_mev2) induc_nn2_ls = nn2_ls*(1+std_mev1)*(1+std_mev2) elif corr1>=0.5 and corr3>=0.5 and corr2<0.5: induc_cur_ls = cur_ls*(1+std_mev1)*(1+std_mev3) induc_on2_ls = on2_ls*(1+std_mev1)*(1+std_mev3) induc_tt2_ls = tt2_ls*(1+std_mev1)*(1+std_mev3) induc_sx2_ls = sx2_ls*(1+std_mev1)*(1+std_mev3) induc_nn2_ls = nn2_ls*(1+std_mev1)*(1+std_mev3) elif corr3>=0.5 and corr2>=0.5 and corr1<0.5: induc_cur_ls = cur_ls*(1+std_mev2)*(1+std_mev3) induc_on2_ls = on2_ls*(1+std_mev2)*(1+std_mev3) induc_tt2_ls = tt2_ls*(1+std_mev2)*(1+std_mev3) induc_sx2_ls = sx2_ls*(1+std_mev2)*(1+std_mev3) induc_nn2_ls = nn2_ls*(1+std_mev2)*(1+std_mev3) elif corr1>=0.5 and corr2<0.5 and corr3<0.5: induc_cur_ls = cur_ls*(1+std_mev1) induc_on2_ls = on2_ls*(1+std_mev1) induc_tt2_ls = tt2_ls*(1+std_mev1) induc_sx2_ls = sx2_ls*(1+std_mev1) induc_nn2_ls = nn2_ls*(1+std_mev1) elif corr2>=0.5 and corr1<0.5 and corr3<0.5: induc_cur_ls = cur_ls*(1+std_mev2) induc_on2_ls = on2_ls*(1+std_mev2) induc_tt2_ls = tt2_ls*(1+std_mev2) induc_sx2_ls = sx2_ls*(1+std_mev2) induc_nn2_ls = nn2_ls*(1+std_mev2) elif corr3>=0.5 and corr1<0.5 and corr2<0.5: induc_cur_ls = cur_ls*(1+std_mev3) induc_on2_ls = on2_ls*(1+std_mev3) induc_tt2_ls = tt2_ls*(1+std_mev3) induc_sx2_ls = sx2_ls*(1+std_mev3) induc_nn2_ls = nn2_ls*(1+std_mev3) else: induc_cur_ls = cur_ls induc_on2_ls = on2_ls induc_tt2_ls = tt2_ls induc_sx2_ls = sx2_ls induc_nn2_ls = nn2_ls # 打印逻辑移到if结构外,所有分支执行完都会打印 print(induc_cur_ls) print(induc_on2_ls) print(induc_tt2_ls) print(induc_sx2_ls) print(induc_nn2_ls)
内容的提问来源于stack exchange,提问作者Julius Admire
相关产品推荐
相关产品推荐

