循环1-10打印只偶数、只奇数或全部

0 投票
2 回答
4438 浏览
提问于 2025-04-18 05:25

这个程序会循环从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.formatenumerate 的可选第二个参数来改善用户输入:

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

撰写回答