之前 初步完成猜数字 后,在社区提了个问:请问如何调试。不久开发者答复了且给了 ??的用法说明文档,从中可见不仅可输出各种量值且可以 定制问号的语义

加两行在猜数字例程的循环开头:

想的=(6の乱数)+1
猜的=「你猜?」と尋ねる。

後判定で繰り返す
  ?? 猜的
  ?? 猜的==想的
  もし、猜的>想的ならば
    猜的=「大了,再猜?」と尋ねる。
  違えば、もし、猜的<想的ならば
    猜的=「小了,再猜?」と尋ねる。
  違えば
    「中了!」と表示
  ここまで

ここまで、(猜的≠想的)の間。

从3猜到6输出如下,猜的=「小了,再猜?」と尋ねる。 取到6后,在 ここまで、(猜的≠想的)の間 判断为否后直接跳出循环因此没有再执行到 ?? 的两行:

main.nako3(5): 3
main.nako3(6): false
main.nako3(5): 4
main.nako3(6): false
main.nako3(5): 5
main.nako3(6): false

如果加在循环末尾:

想的=(6の乱数)+1
猜的=「你猜?」と尋ねる。

後判定で繰り返す
  もし、猜的>想的ならば
    猜的=「大了,再猜?」と尋ねる。
  違えば、もし、猜的<想的ならば
    猜的=「小了,再猜?」と尋ねる。
  違えば
    「中了!」と表示
  ここまで

  ?? 猜的
  ?? 猜的==想的
ここまで、(猜的≠想的)の間。

先猜3再猜中4的输出:

main.nako3(13): 4
main.nako3(14): true

另想到,如果能输出顺序执行的语句列表,也许会方便调试,比如先猜3再猜中4的大概过程:

行1 想的=(6の乱数)+1
行2 猜的=「你猜?」と尋ねる。
  【输入】 3
行4 後判定で繰り返す
行5 もし、猜的>想的ならば
行7	違えば、もし、猜的<想的ならば
行8	  猜的=「小了,再猜?」と尋ねる。
  【输入】 4
行13  ここまで、(猜的≠想的)の間。
行9  	違えば
行10	  「中了!」と表示
行13 ここまで、(猜的≠想的)の間。

搜了下 发现 python 的 trace 就可以,比如test.py:

想的 = 1
for i in range(3):
  if i != 想的:
    print(i+1)
  else:
    break
print('跑')

% python -m trace -t test.py 输出如下:

 --- modulename: test, funcname: <module>
test.py(1): 想的 = 1
test.py(2): for i in range(3):
test.py(3):   if i != 想的:
test.py(4):     print(i+1)
1
test.py(2): for i in range(3):
test.py(3):   if i != 想的:
test.py(6):     break
test.py(7): print('跑')
跑

break之前居然不是else。