0

这个问题是大学软件课作业的一部分。我早就放弃了,但我真的很想学习 python,所以我正在重新审视一些作业。

我创建了一个简单的代码,它将给定的英寸数转换为英尺和英寸。到目前为止,我已经能够让它检查输入是否为整数,并且是正数。最后一步是能够接受来自命令行或控制台的输入。就像标题所说,我如何检查命令行参数,如果不存在,提示通过控制台输入并完成脚本执行?

这是我在此处的帮助下制作的原始代码

try:
    total_inches = int(input('Enter a distance in inches: '))
    if total_inches > 0:
        INCHES_PER_FOOT = 12
        feet = total_inches//INCHES_PER_FOOT
        final_inches = total_inches%INCHES_PER_FOOT
        
        print(str(total_inches) + '"', 'is equivalent to', str(feet) + '\'', str(final_inches) + '"')
    else:
        print('Must be a positive integer. Try again')
except ValueError:
    print('Not a number. Try again.')

如您所见,它检查输入并相应地执行。

我在这里这里做了一些搜索,但还没有找到任何可靠的东西。第一个是关于我知道的 input() 和我还不熟悉的解析。第二个让我看到了这段看起来很笨拙的代码:

from sys import argv

if len(argv) == 1:
    try:
        total_inches = int(argv[1])
        if total_inches > 0:
            INCHES_PER_FOOT = 12
            feet = total_inches//INCHES_PER_FOOT
            final_inches = total_inches%INCHES_PER_FOOT
            
            print(str(total_inches) + '"', 'is equivalent to', str(feet) + '\'', str(final_inches) + '"')
        else:
            print('Must be positive')
    except ValueError:
        print('Not a number. Try again.')
else:
    try:
        total_inches = int(input('Enter a distance in inches: '))
        if total_inches > 0:
            INCHES_PER_FOOT = 12
            feet = total_inches//INCHES_PER_FOOT
            final_inches = total_inches%INCHES_PER_FOOT
            
            print(str(total_inches) + '"', 'is equivalent to', str(feet) + '\'', str(final_inches) + '"')
        else:
            print('Must be positive')
    except ValueError:
        print('Not a number. Try again.')

当我包含命令行参数时,它仍会提示输入控制台,但否则会正确执行。当我省略命令行参数并尝试执行脚本时,我得到:

D:\Python\2>python p2e3.py
Traceback(最近一次调用最后一次):
文件“D:\Python\2\p2e3.py”,第 5 行,在
total_inches = int(argv[1])
IndexError: list index超出范围

我知道这意味着它缺少一个参数,但我不明白为什么它不跳到 else 语句,或者为什么当有命令行参数时它仍然要求控制台输入。不确定我的缩进是否错误或者我应该使用其他功能,任何帮助将不胜感激。

4

0 回答 0