簡體   English   中英

Python:我已經嵌套了不起作用的循環,我不知道為什么

[英]Python: I have nested for loops that aren't working and I don't know why

所以我試圖弄清楚如何打印數字比奇數更多的數字。 這是我的代碼:

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開始。(感謝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)

正如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)

stop . 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):

如果用戶的輸入不是數字,您可能還需要檢查異常處理。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM