如何在for循环中计算累计值?Python奇偶统计代码修复求助
生成100个随机数并统计奇偶数量的代码修正
问题描述
我想要编写一段生成100个随机数并判断每个数奇偶性的Python代码,最终需输出偶数和奇数的总数。以下是我目前的代码:
import random even = 0 odd = 0 for count in range(100): def main(even, odd): number = random.randint(1, 1000) return number def isEven(even, odd): number = main(even, odd) if number % 2 == 0: even += 1 print(number, 'is even') elif number % 2 != 0: odd += 1 print(number, 'is odd') return odd return even main(even, odd) isEven(even, odd) def totals(even, odd): even = isEven(even, odd) odd = isEven(even, odd) print('the total number of even numbers is', even) print('the total number of odd numbers is', odd) totals(even, odd)
但运行代码后,偶数和奇数的总数结果在None到2之间,我尝试在main()、isEven()和totals()函数中设置even和odd为局部变量,仍未解决问题。如何修改代码才能让总数之和为100,得到正确的统计结果?
问题分析
- 函数定义位置错误:在
for循环内部重复定义main和isEven函数,属于冗余操作,会导致逻辑混乱且浪费资源。 - 返回值逻辑失效:
isEven函数仅在处理奇数时返回odd,处理偶数时无返回值(默认返回None);且return odd之后的return even永远无法执行,导致统计值丢失。 - 变量传递逻辑错误:Python中整数是不可变类型,函数内部修改的
even和odd是局部变量,不会影响外部变量;同时你未将函数返回的结果重新赋值给外部计数器。 - 统计逻辑重复:
totals函数额外调用两次isEven,会生成新的随机数,而非统计之前循环生成的100个数。
修正方案
方案一:简洁版(直接循环处理)
import random even_count = 0 odd_count = 0 # 循环生成100个随机数并统计 for _ in range(100): number = random.randint(1, 1000) if number % 2 == 0: even_count += 1 print(f"{number} is even") else: odd_count += 1 print(f"{number} is odd") # 输出统计结果 print(f"Total even numbers: {even_count}") print(f"Total odd numbers: {odd_count}")
方案二:模块化版本(函数封装)
import random # 封装随机数生成逻辑 def generate_random_num(): return random.randint(1, 1000) # 封装奇偶统计逻辑 def count_parity(): even = 0 odd = 0 for _ in range(100): num = generate_random_num() if num % 2 == 0: even += 1 print(f"{num} is even") else: odd += 1 print(f"{num} is odd") return even, odd # 执行统计并输出结果 even_total, odd_total = count_parity() print(f"Total even numbers: {even_total}") print(f"Total odd numbers: {odd_total}")
关键改进点
- 移除循环内的冗余函数定义,简化逻辑。
- 直接维护计数器变量(或在函数内部维护),避免不可变类型的传递问题。
- 确保统计的是循环生成的100个随机数,而非额外生成的新数。
- 使用f-string提升输出可读性。
内容的提问来源于stack exchange,提问作者FGCpt
相关产品推荐
相关产品推荐

