Python分组统计代码for循环解释及首个输入无法使用split的问题咨询
Python代码问题解答
原代码片段
kicked = 0 def calculate(): room = 0 global kicked N = input("Write the number of groups\n") M = input("Write the size of the groups, separated with space:\n").split() for elem in M: if room+int(elem)<int(N)+1: room += int(elem) else: kicked += 1 while True: try: calculate() print(kicked, "groups did not fit") break except: print("An exception occurred, try again:\n")
1. for循环执行逻辑解释
该for循环的作用是逐个判断每个小组是否能被容纳,执行逻辑如下:
- 遍历对象是第二个用户输入按空格拆分后得到的小组大小列表
M,每轮循环处理1个小组 - 每轮先把当前遍历到的小组大小字符串
elem转为整数,和当前已占用的容量room相加 - 判断相加后的结果是否小于
int(N)+1:该判断等价于room + int(elem) ≤ int(N),也就是判断当前剩余容量是否足够容纳该小组 - 若容纳条件成立:将该小组的大小累加到
room中,更新已占用容量 - 若容纳条件不成立:将全局计数变量
kicked加1,统计无法容纳的小组数量
2. 第一个输入不能使用split方法的原因
主要有两点原因:
- 业务需求不匹配:第一个输入要求用户输入单个数值,不需要拆分多值,split方法是针对多值输入(比如第二个输入要求用空格分隔多个小组大小)的场景设计的,对单值输入没有实际作用
- 语法逻辑会报错:如果对第一个输入调用split(),得到的结果是一个列表(例如用户输入
5,split后得到['5']),后续代码中调用int(N)做类型转换时,无法直接将列表转为整数,会触发类型错误,导致程序进入报错重试逻辑
内容的提问来源于stack exchange,提问作者David OGrabbarna
相关产品推荐
相关产品推荐

