循环1-10打印只偶数、只奇数或全部
这个程序会循环从1到10,但用户可以选择要打印偶数、奇数,还是所有的数字。
比如,如果用户选择只打印偶数,输出应该是: 2 4 6 8 10
如果只打印奇数:1 3 5 7 9
如果打印所有数字:1 2 3 4 5 6 7 8 9 10
但是当我运行下面的代码时,打印所有数字的功能正常,但如果选择只打印偶数或奇数,程序就完全不运行了。所以我在想,这里可能有什么错误。
MODE = ["Only Even", "Only Odds", "All Numbers"]
for i,v in enumerate(MODE):
print i+1, v
count = 0
s = int(input("Enter Mode Wanted: "))
if s == 3:
while count < 10:
print count+1
count += 1
elif s == 2:
while count <=10:
if count%2 != 0:
print count
count += 1
elif s == 1:
while count <= 10:
if count%2 == 0:
print count
count += 1
2 个回答
0
首先,在这种情况下,最好用 for
循环,而不是 while
循环,因为你已经知道要遍历的内容是什么:
for count in range(1, 11):
这样可以避免忘记手动增加 count
的错误(或者在错误的地方增加它)。
其次,你应该只运行这个循环一次,并把你的规则放在里面:
for count in range(1, 11):
if (s == 3 or
(s == 2 and count % 2 != 0) or
(s == 1 and count % s == 0)):
print count
这样做可以大大减少重复的代码,从而降低出错的可能性。
最后,你可以参考 这个问题,使用 str.format
和 enumerate
的可选第二个参数来改善用户输入:
MODE = ["Only Even", "Only Odds", "All Numbers"]
for i, v in enumerate(MODE, 1):
print "{0}: {1}".format(i, v)
while True:
try:
s = int(input("Enter mode wanted: "))
except ValueError:
print("Not an integer.")
else:
if s in range(1, len(MODE) + 1):
break
print("Not a valid mode.")
for count in range(1, 11):
...
2
你的 count += 1
的缩进不对。
修正后:
MODE = ["Only Even", "Only Odds", "All Numbers"]
for i,v in enumerate(MODE):
print i+1, v
count = 1 #changed 0 to 1
s = int(raw_input("Enter Mode Wanted: "))
if s == 3:
while count <= 10: #changed < to <=
print count #changed count+1 to count
count += 1
elif s == 2:
while count <=10:
if count%2 != 0:
print count
count += 1
elif s == 1:
while count <= 10:
if count%2 == 0:
print count
count += 1