Python订阅营收计算结果异常 如何基于if语句正确赋值变量
问题解答
1. 营收计算为35而非32的原因
你在循环中每次都对整个输入数组做乘法赋值,而不是仅修改当前遍历到的单个元素:
- 第一次遍历j=0(对应元素3):满足优惠条件,全数组乘6得到
[18, 12],打印第一个元素为18 - 第二次遍历j=1(对应元素2):不满足优惠条件,全数组乘7直接覆盖之前的结果,得到
[21,14],打印第二个元素为14 - 循环结束后
months_value保留的是最后一次覆盖的全量乘7的结果,求和自然得到35,优惠规则只在第一次循环生效,很快就被后续操作覆盖了。
2. 逻辑修复方案
不需要将months_value声明为全局变量,只需要初始化独立的结果存储容器,针对每个元素单独计算即可,两种实现参考:
实现1:保留单用户营收数组输出的版本
import numpy as np def subscription_summary(months_subscribed): months_value = np.zeros(len(months_subscribed)) # 初始化等长的空结果数组 for j in range(len(months_subscribed)): month = months_subscribed[j] if month % 3 == 0: months_value[j] = month * 6 # 仅修改当前索引位置的元素值 else: months_value[j] = month * 7 print(months_value[j]) # 打印语句1 print(months_value) # 打印语句2 print(sum(months_value)) # 打印语句3 # 测试长输入数组 months_subscribed = [3,2,18,0] subscription_summary(months_subscribed)
实现2:仅计算总营收的简化版本
def subscription_summary(months_subscribed): total_revenue = 0 for month in months_subscribed: if month % 3 == 0: total_revenue += month * 6 else: total_revenue += month * 7 print(f"总营收:{total_revenue}美元")
3. 两处打印第一个值不一致的原因
循环内的打印语句1每次输出的是本次赋值后数组对应索引位置的值,第一次循环赋值后数组第一个值是18,所以第一次打印18;第二次循环用全量乘7的结果覆盖了整个数组,循环结束后的打印语句2输出的是最后一次覆盖后的完整数组,所以第一个值变成了21。
内容的提问来源于stack exchange,提问作者CuadrosCody
相关产品推荐
相关产品推荐

