关于Python:Python – 使用IF语句的简单While循环

Python - Simple While loop with IF statements

我正在尝试制作一个脚本来检查是否输入了参数。 如果输入了一个参数,它将使用该数字作为计时器,如果没有输入参数,则默认情况下,计时器应该等于3。

这个while循环将从给定的数字& 在倒计时时打印每个值。 当它到达终点时它会输出'爆炸!'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python3

import sys

timer = int(sys.argv[1])

while timer != 0:
    if len(sys.argv[1]) == 0:
        timer = 3

    elif len(sys.argv[1]) == int(sys.argv[1]):
        timer = int(sys.argv[1])

    print (timer)
    timer = timer - 1

print ('blast off!')

我的作业检查脚本给了我一个IndexError错误:列表索引超出范围 - 与第一个timer = int(sys.argv [1])相关

我不确定我应该"将空字符串转换为整数"

谢谢


检查你确实有一个参数:

1
timer = int(sys.argv[1]) if len(sys.argv) >= 2 else 3


我猜你的脚本是在没有参数的情况下调用的,因为len(sys.argv) == 0会失败。

如果用户未指定值,则将计时器设置为任何值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys

##################
if len(sys.argv) > 1:
    timer = int(sys.argv[1])
else:
    timer = 0
##################


while timer != 0:
    if len(sys.argv[1]) == 0:
        timer = 3

    elif len(sys.argv[1]) == int(sys.argv[1]):
        timer = int(sys.argv[1])

    print (timer)
    timer = timer - 1

print ('blast off!')

甚至更好:

1
2
3
4
try:
    timer = int(sys.argv[1])
except:
    timer = 0


您试图索引列表中不存在的位置并获得IndexError:list索引超出范围。

让我们调用你的文件countdown.py

当您运行python3 countdown.py然后sys.argv == ['countdown.py']

如果你运行python3 countdown.py 5然后sys.argv == ['countdown.py', 5]

建议查看argparse库,因为这是从命令行解析参数的pythonic方法。

例如,您的代码如下所示:
#!/ usr / bin / env python3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import argparse


def countdown(timer):
    [print(tick) for tick in reversed(range(1, timer+1))]
    print('blast off!')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Countdown to blast off!')
    parser.add_argument('timer', type=int, nargs='?', default=3)

    args = parser.parse_args()

    countdown(args.timer)