【问题标题】:Python: I have nested for loops that aren't working and I don't know whyPython:我嵌套了不起作用的 for 循环,我不知道为什么
【发布时间】:2018-08-04 20:00:05
【问题描述】:

所以我想弄清楚如何打印偶数多于奇数的数字。这是我的代码:

inVal=(input("Please enter a positive integer: "))
evencounter=0
oddcounter=0

for i in range(1,int(inVal)):
    for j in range (1,len(str(i))):
        if(int(str(i)[j])%2==0):
            evencounter+=1
        else:
            oddcounter+=1
    if(evencounter>oddcounter):
        print(i)

怎么了?

【问题讨论】:

    标签: python for-loop nested-loops


    【解决方案1】:

    我认为问题在于,您没有重置计数器变量。另一个问题是您的第二个循环从 1 而不是 0 开始。(感谢 Leonardo Gazdek 指出!)

    字符串索引从 0 开始:

    >>> 'abc'[1]
    'b'
    

    你应该这样做:

    inVal=(input("Please enter a positive integer: "))
    evencounter=0
    oddcounter=0
    
    for i in range(1,int(inVal)):
        # add those pieces of code:
        evencounter=0 
        oddcounter=0
        for j in range (0,len(str(i))): # start from 0
            if(int(str(i)[j])%2==0):
                evencounter+=1
            else:
                oddcounter+=1
        if(evencounter>oddcounter):
            print(i)
    

    【讨论】:

    • 非常感谢!
    【解决方案2】:

    range(start, stop[, step]) 给出从start 到值小于 stop 的值。

    在你的内部循环中,改变

    for j in range (1,len(str(i))):
    

    for j in range (0,len(str(i))):
    

    因为索引从0开始。

    并且您需要在每次外循环迭代后重置计数器的值,以便它可以重新开始下一个数字。

    另外,如果您还想包含inVal,请将外部循环更改为

    for i in range(1,int(inVal)+1):
    

    如果用户输入的不是数字,您可能还需要检查this 的异常处理。

    evencounter=0
    oddcounter=0
    
    try:
        for i in range(1,int(inVal)+1):
            for j in range (0,len(str(i))):
                if(int(str(i)[j])%2==0):
                    evencounter+=1
                else:
                    oddcounter+=1
            if(evencounter>oddcounter):
                print(i)
    
            oddcounter = evencounter = 0
    except ValueError:
        print('Conversion error!')
    

    【讨论】:

      【解决方案3】:

      正如 zeet 正确指出的那样,您需要重置每个数字上的计数器(它们甚至不需要是全局的),但是您还有另一个问题。您需要从 0 开始第二个循环,而不是 1。字符串索引从 0 开始。

      inVal=(input("Please enter a positive integer: "))
      
      for i in range(1,int(inVal)):
          evencounter=0 
          oddcounter=0
          for j in range (0,len(str(i))):
              if(int(str(i)[j])%2==0):
                  evencounter+=1
              else:
                  oddcounter+=1
          if(evencounter>oddcounter):
              print(i)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-23
        • 1970-01-01
        • 2020-02-10
        • 2021-12-13
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多