You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,得到正确的统计结果?

问题分析

  1. 函数定义位置错误:在for循环内部重复定义main和isEven函数,属于冗余操作,会导致逻辑混乱且浪费资源。
  2. 返回值逻辑失效:isEven函数仅在处理奇数时返回odd,处理偶数时无返回值(默认返回None);且return odd之后的return even永远无法执行,导致统计值丢失。
  3. 变量传递逻辑错误:Python中整数是不可变类型,函数内部修改的even和odd是局部变量,不会影响外部变量;同时你未将函数返回的结果重新赋值给外部计数器。
  4. 统计逻辑重复: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:15:45