Python - 使用IF语句的简单While循环

时间:2017-09-22 03:52:42

标签: python python-3.x

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

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

#!/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错误:列表索引超出范围 - 与第一个计时器相关= int(sys.argv [1])

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

谢谢

3 个答案:

答案 0 :(得分:1)

检查你确实有一个参数:

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

答案 1 :(得分:0)

您正在尝试索引列表中不存在的位置并获得IndexError: list index out of range

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

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

如果你跑 python3 countdown.py 5 ,那么 sys.argv == ['countdown.py', 5]

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

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

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)

答案 2 :(得分:0)

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

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

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

甚至更好:

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