如何确保python

时间:2016-11-24 04:17:20

标签: python-2.7 input

我使用下面的代码作为在Python中定价选项的一部分。情况可能是这是获取用户输入的低效方式。我会就此提出一些建议。下面的代码可以工作。

但我的主要关注点如下:

1)如何确保用户只在第一个输入中输入“put”或“call”?如果输入任何其他内容,我希望循环重启

2)如果输入错误,我怎样才能回到单个部分,而不是重新启动整个循环?例如,如果他们以正确的格式输入所有内容但是然后搞砸了“K”,它将从头开始重新启动整个循环。有没有办法只重新提示K而不必重新输入其他所有内容?

提前致谢。

while True:

    call_or_put = raw_input("Enter call or put for option type: ")

    print "-------------------------"
    S = raw_input("Enter a valid price for the underlying asset: ")
    try:
        S = float(S)
    except ValueError:
        continue

    print "---------------------------"
    r = raw_input("Enter the risk-free rate (as a DECIMAL), using 10 year treasury yield: ")
    try:
        r = float(r)
    except ValueError:
        continue

    print "---------------------------"
    t0 = raw_input("Enter a valid number of days (as an integer) until expiration: ")
    try:
        t0 = int(t0)
    except ValueError:
        continue

    print "---------------------------"
    K = raw_input("Enter the strike price: ")
    try:
        K = float(K)
    except ValueError:
        continue

    if type(S)==float and type(r)==float and type(t0)==int and type(K)==float:
        break

2 个答案:

答案 0 :(得分:1)

做一下你在检查价值时已经做过的事情。比较方法可能不同,但整体策略是相同的:

call_or_put = raw_input("Enter call or put for option type: ").strip().lower()
if call_or_put not in ("call","put"):
    continue

至于完成每个部分而不是重新启动,这意味着循环。你可以为每个查询做这样的事情:

while(True):
    print "-------------------------"
    S = raw_input("Enter a valid price for the underlying asset: ")
    try:
        S = float(S)
        break
    except ValueError:
        continue

答案 1 :(得分:1)

我建议你在这种情况下使用正则表达式,但由于它不是真的需要我会在没有它的情况下解释。

1)如何确保用户只在第一个输入中输入“put”或“call”?如果输入任何其他内容,我希望循环重启

你可以通过多种方式做到这一点,最简单的方法就是检查输入是否被调用或放入。

call_or_put = raw_input("Enter call or put for option type: ")
if (call_or_put in ['call','put']):
  #Do something

这很容易出错,因为他们可能会意外地放置空格或将其写入所有大写字母。为了解决这个问题,我会用空格替换所有空格,然后小写字母表中的所有字母。

call_or_put = raw_input("Enter call or put for option type: ").replace(" ","").lower()
if (call_or_put in ['call','put']):
  #Do something

如果您只想删除前导/结尾字符,也可以使用.strip()代替.replace()

2)如果输入错误,我怎样才能回到单个部分,而不是重新启动整个循环?例如,如果他们以正确的格式输入所有内容但是然后搞砸了“K”,它将从头开始重新启动整个循环。有没有办法重新提示K而不必重新输入其他所有内容?

您可以使用while语句执行此操作。这是一个例子:

answer = raw_input("Please input '123' > ").strip()
while not(answer == "123"):
  print "That was not correct, please try again"
  answer = raw_input("Please input '123' > ").strip()

print "Thanks!"