Python任意输入若干数求和

该博客介绍了如何使用Python编写程序,实现用户任意输入多个数并求和,直到输入为0或负数时程序结束。提供了包含注释的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python任意输入若干数求和

题目

Python输入若干数,求所有的正数之和,当输入的数中包含0或负数的时候,程序结束!

代码如下(示例):
其中有详细的注释很好理解哒!

print("<---------------------若干数求和----------------------------->")

def sum1(num):
    num_tuple = eval(num)                                                     #将获取到的数转换为元组
    for b in num_tuple:                                                            #用for语句遍历元组
        if b<=0:                                                                         #if语句判断元组中是否含有小于等于0的数
            print("您输入的数中不允许有小于等于0的数")
            return print("程序结束!")                                        #如果有的话就直接返回“错误”提示
    print(sum(num_tuple))                                                      #否则计算元组内的数据和


num_input = input('请输入需要求和的数字,用逗号分隔:')
sum1(num_input)                                                                 #调用函数

执行结果

代码如下(示例):

<------------------求和-------------------------->
请输入需要求和的数字,用逗号分隔:1.2,2,3
6.2

### 背包问题中任意量元素求和的算法实现 背包问题是经典的组合优化问题之一,通常涉及在一定约束条件下最大化目标函。当涉及到任意量元素求和时,可以将其转化为子集和问题(Subset Sum Problem),即判断是否存在一个子集使其元素之和等于特定的目标值。 #### 1. 子集和问题的核心思想 子集和问题可以通过动态规划解决。假设有一个整集合 `nums` 和目标值 `target`,我们需要找到是否存在一个子集使它的和恰好为 `target`。定义二维布尔组 `dp[i][j]` 表示前 `i` 个元素能否构成和为 `j` 的子集[^1]。 #### 2. 动态转移方程 动态规划的状态转移方程如下: - 如果不选第 `i` 个元素,则 `dp[i][j] = dp[i-1][j]`; - 如果选择第 `i` 个元素,则 `dp[i][j] = dp[i-1][j-nums[i]]`, 条件是 `j >= nums[i]`. 最终答案存储在 `dp[n][sum/2]` 中,其中 `n` 是组长度。 #### 3. 算法实现 以下是 Python 实现代码: ```python def can_partition(nums): total_sum = sum(nums) if total_sum % 2 != 0: return False # 总和为奇则无法分割 target = total_sum // 2 n = len(nums) # 初始化 DP 组 dp = [[False] * (target + 1) for _ in range(n + 1)] for i in range(n + 1): dp[i][0] = True # 当目标和为 0 时总是成立 # 填充 DP 表格 for i in range(1, n + 1): for j in range(1, target + 1): if j < nums[i - 1]: dp[i][j] = dp[i - 1][j] else: dp[i][j] = dp[i - 1][j] or dp[i - 1][j - nums[i - 1]] return dp[n][target] # 测试用例 nums = [1, 5, 11, 5] print(can_partition(nums)) # 输出: True 或 False ``` 上述代码实现了通过动态规划来验证是否可以从给定组中选出若干个元素,使得它们的和为目标值的一半。如果总和为奇,则直接返回 `False`。 #### 4. 时间与空间复杂度分析 时间复杂度为 O(n*target),其中 `n` 是组大小,`target` 是目标和的一半。空间复杂度同样为 O(n*target)[^1]。为了降低空间消耗,还可以采用滚动组的方式进一步优化至 O(target)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值