RhinoPython101,数组例子

请问一下RhinoPython101,第39页这个例子,怎么我直接回车,不输入内容,程序没有中断跳转呢,而是一直让我输入下去?实在是不知道啥情况。有没有大佬帮我看看啊,谢谢。程序如下:

import rhinoscriptsyntax as rs
def myfavorthings():
things=[]
while True:
count=len(things)
prompt=“What is your {0}th most favorite thing?”.format(count+1)
if count==0:
prompt=“What is your most favorite thing?”
elif count==1:
prompt=“What is your second most favorite thing?”
elif count==2:
prompt=“What is your third most favorite thing?”
answer=rs.GetString(prompt)
if answer is None:break
things.append(answer)
if len(things)==0:return
print “Your”,len(things),“favorite things are:”
for i,thing in enumerate(things):print i+1,“.”,thing
myfavorthings()

你可以使用下图功能粘贴代码
这样代码就会带有缩进,否则的话这个文本别人是不太好复现的


也可以将代码作为txt附件直接上传

import rhinoscriptsyntax as rs
def myfavorthings():
    things=[]
    while True:
        count=len(things)
        prompt="What is your {0}th most favorite thing?".format(count+1)
        if count==0:
            prompt="What is your most favorite thing?"
        elif count==1:
            prompt="What is your second most favorite thing?"
        elif count==2:
            prompt="What is your third most favorite thing?"
        answer=rs.GetString(prompt)
        if answer is None: break
        things.append(answer)
        if len(things)==0: return
    print "Your",len(things),"favorite things are:"
    for i,thing in enumerate(things):print i+1,".",thing
myfavorthings()

谢谢版主,应该是第14句,if answer is None: break,这个None的理解,回车不算None吗?

虽然很奇怪但是想到从之前对 rhinoscriptsyntax 的说明是二次封装的,对于这种问题也不奇怪,我看久远一点的示例文件中获取字符串用的是

Rhino.Input.RhinoGet.GetString()

在这个函数里返回状态是有区别的:
输入字符串:Commands.Result.Success
直接回车:Commands.Result.Nothing
按esc: Commands.Result.Cancel

而测试 rs.GetString() 时候按esc返回结果是None,可以看出来还是有区别的。
我不知道它在直接按Enter时候返回结果是什么,不过如果你实际应用时候不想出意料外的问题就建议用**Rhino.Input.RhinoGet.GetString()**就好。

如果是初学python,应该有注意到python中的input()函数,对于这个函数,如果不符合输入要求,会直接SyntaxError,Esc键入是无效的,而Enter就会报错。

所以对你的问题来说,是的,Enter 和 Esc是不同的。

1 个赞

嗯嗯,谢谢,学习了

if answer is None: break
我改成了
if not answer: break
直接回车,程序可以了。

1 个赞