【问题标题】:Python while loop inside while loopPython while循环在while循环中
【发布时间】:2013-03-28 09:57:23
【问题描述】:

我的代码进退两难,首先我必须编写一个练习来实现以下目标

锻炼

创建一个文件以完成此练习。编写一个程序,生成 100 个随机数(范围为 1-1000),并计算其中有多少是偶数,有多少是奇数。将结果显示在屏幕上,如下面的示例输出所示。提示:使用 while 循环循环 100 次。

我的结果:

import random
num = 0
odd = 0
even = 0

while num < 100:
    random.randint(1,1000)
    num = num + 1
    #print(num)
    if random.randint(1,1000)%2==0:
        even = even + 1
    else:
        odd = odd + 1

print ("Out of 100 Random Numbers,",even,"were even and",odd,"were Odd")

输出:

Out of 100 Random Numbers, 50 were even and 50 were Odd

所有肉汁!!

下一个活动:

添加另一个 while 循环,该循环将部分 a 重复 10 次。将结果显示在屏幕上,如下面的示例输出所示。

输出如下:

Out of 100 random numbers, 56 were odd, and 44 were even.
Out of 100 random numbers, 60 were odd, and 40 were even.
Out of 100 random numbers, 47 were odd, and 53 were even.
Out of 100 random numbers, 54 were odd, and 46 were even.
Out of 100 random numbers, 48 were odd, and 52 were even.
Out of 100 random numbers, 53 were odd, and 47 were even.
Out of 100 random numbers, 46 were odd, and 54 were even.
Out of 100 random numbers, 52 were odd, and 48 were even.
Out of 100 random numbers, 53 were odd, and 47 were even.

所以我写了:

import random
num = 0
odd = 0
even = 0
loop = 0


while loop < 10:
    loop = loop +1

    while num < 100:
        num = num + 1
        rand = random.randint(1,1000)
        #print(num)
        if rand%2==0:
            even = even + 1
        else:
            odd = odd + 1
    result = print ("Out of 100 Random Numbers,",even,"were even and",odd,"were Odd")

导致输出:

Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd
Out of 100 Random Numbers, 50 were even and 50 were Odd

你们中的一位优秀的程序员能否向我解释为什么我会得到这个结果和/或修改代码以获得练习的预期结果。

最好解释一下它为什么不起作用以及如何解决它,因为您知道他们在说什么,给一个男人一条他会吃一天的鱼,教他一条他会吃一辈子的鱼。

感谢您的宝贵时间。

【问题讨论】:

  • Inner while 在第一次循环后不会执行,因为它会达到 100。您必须在第一个循环中初始化 num 值。

标签: python python-3.x


【解决方案1】:

尝试以这种方式更新您的代码(将 num、odd、even 初始化移动到 top while 内):

from random import randint

loop = 0

while loop < 10:
    num = 0
    odd = 0
    even = 0
    loop += 1

    while num < 100:
        num += 1
        rand = randint(1, 1000)
        if rand % 2 == 0:
            even += 1
        else:
            odd += 1
    print "Out of 100 Random Numbers, {0} where even and {1} where Odd".format(even, odd)

【讨论】:

    【解决方案2】:

    每次通过内部循环后,您都不会重置任何计数器。所以,第一次,它计算该运行的赔率和偶数,直到 num 达到 100。第二次,当它到达 while 循环的开始时,它检查 num 的值:它是已经 100,所以它甚至从不进入循环,只是打印上一次的计数。

    因此修复它的一种方法是将numoddeven 的设置移动到外循环内。

    说了这么多,在这里使用 while 循环有点奇怪。确实,您应该研究一下 for 循环,这对于此目的要好得多。

    【讨论】:

    • 太好了,所有的回复都很好,但是你的回复最好地向我解释了,所以谢谢,我觉得一开始就没有弄清楚,真是个笨蛋。
    • 谢谢。不过,不要对自己这么苛刻:对于一个编程新手来说,你做得很好。养成像电脑一样思考的习惯需要一些时间。
    • 谢谢:D,是的,我也会为此选择一个 for 循环,但是我正在遵循我的讲座给我的实践。
    【解决方案3】:

    您需要在外循环内移动以下内容:

    num = 0
    odd = 0
    even = 0
    

    否则内部循环的第二次和后续迭代实际上是无操作的。

    【讨论】:

      【解决方案4】:

      您忘记在外部 while 循环内(在启动 while num &lt; 100 循环之前)重置 num(以及 evenodd)的值。第二次,它根本不需要执行内部循环或计算任何随机数,因为 num 已经是 100

      【讨论】:

      • 也是“曾经”,而不是“哪里”或“哪里”!
      【解决方案5】:

      while 循环终止后变量num=100,所以你需要在外部while 循环中重置num=0

      【讨论】:

        【解决方案6】:

        只需在第一个 while 循环开始时将 odd,even,num 声明为 0。
        这样,您每次都将重置这些变量,从而为您提供所需的输出。

        你应该以

        结束
        while loop < 10:
            loop = loop +1
            num = even = odd = 0 # here
            while num < 100:
                num = num + 1
                rand = random.randint(1,1000)
                #print(num)
                if rand % 2 == 0:
                    even = even + 1
                else:
                    odd = odd + 1
                # grammar
             print ("Out of 100 Random Numbers,",even,"were even and",odd,"were Odd")
        

        另一个打印生成数字总数的版本

        loop = 0
        even = odd = 0 # change 1
        while loop < 10:
            loop = loop +1
            num = 0 # change 2
            while num < 100:
                num = num + 1
                rand = random.randint(1,1000)
                #print(num)
                if rand % 2 == 0:
                    even = even + 1
                else:
                    odd = odd + 1
                # grammar
            print ("Out of", loop*100,"Random Numbers,",even,"were even and",odd,"were Odd")
        

        【讨论】:

          猜你喜欢
          • 2014-11-02
          • 1970-01-01
          • 2016-11-27
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多