Gia*_*ear 2 python if-statement command-prompt
我希望在我的Python(2.7)命令提示符下使用语句" True"和" False"
segmentation_accuracy(reference=REFERENCE, segmented=SEGMENTED, output=OUTPUT, method=METHOD, threshold=THRESHOLD, sep=SEP, header=HEADER)
Run Code Online (Sandbox Code Playgroud)
如果标题True打印带有标题的文本文件,如果标题False打印没有标题的文本文件.
在命令提示符中:
REFERENCE = raw_input("Reference (*.shp):")
SEGMENTED = raw_input("Segmented (*.shp):")
METHOD = raw_input("Method (ke, pu, clinton):")
if METHOD != "ke" and METHOD != "pu" and METHOD != "clinton":
raise ValueError("%s is not a valid method" % METHOD)
if METHOD == "ke" or METHOD == "clinton":
THRESHOLD = input("Threshold (0.0 - 1.0):")
if not check_threshold(THRESHOLD):
raise AccuracyException("Threshold of %s is not valid" % THRESHOLD)
else:
THRESHOLD = None
SEP = raw_input("Sep:")
HEADER = raw_input("Header (True/False):")
if HEADER is not True or HEADER is not False:
raise ValueError("%s is not valid" % HEADER)
# output
OUTPUT = raw_input("Output (*.txt):")
Run Code Online (Sandbox Code Playgroud)
当我在Windows中运行命令提示符,如果我设置raw_input("Header (True/False):") True或False,我总是得到ValueError
我也用过这个组合
if HEADER != True or HEADER != False:
raise ValueError("%s is not valid" % HEADER)
Run Code Online (Sandbox Code Playgroud)
同样的问题
返回值raw_input是一个字符串而不是布尔值.因此,你的is not True和is not False测试虽然具有明确的含义,但意义并不是你想要的意思.您需要HEADER与字符串值进行比较.
所以你需要,例如,像这样的代码:
if HEADER.lower() == 'true':
Run Code Online (Sandbox Code Playgroud)
我过去常常tolower()进行不区分大小写的比较.您可能还想剥离空白区域:
if HEADER.strip().lower() == 'true':
Run Code Online (Sandbox Code Playgroud)
我相信你可以对false自己填写测试.
即使你确实有一个布尔值,也不应该像is not True或那样使用代码is False.你应该测试真相:
if somebool:
Run Code Online (Sandbox Code Playgroud)
要么
if not somebool:
Run Code Online (Sandbox Code Playgroud)
因为它更具可读性.