[英]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.