Python:我已经为非';我不工作,我也不';我不知道为什么

Python:我已经为非';我不工作,我也不';我不知道为什么,python,for-loop,nested-loops,Python,For Loop,Nested Loops,所以我想知道如何打印偶数多于奇数的数字。这是我的代码: 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:

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

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)

怎么了?

我认为问题在于,您没有重置计数器变量。另一个问题是,第二个循环从1开始,而不是从0开始。(感谢莱昂纳多·加兹德指出!)

字符串索引从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)

正如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)
给出从
开始
到小于
停止
的值

在你的内心循环中,改变

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

因为索引从
0
开始

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

此外,如果还想包括
inVal
,请将外部循环更改为

for i in range(1,int(inVal)+1):
如果用户的输入不是数字,您可能还需要检查异常处理

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!')

非常感谢你!
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!')