我使用下面的代码作为在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
答案 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!"