37

>>>总是在 Python 中看到提示有点无聊。随机更改提示前缀的最佳方法是什么?

我想象这样的互动:

This is a tobbaconist!>> import sys
Sorry?>> import math
Sorry?>> print sys.ps1
Sorry?
What?>>
4

4 回答 4

67

根据文档,如果您分配一个非字符串对象,sys.ps1那么它将str每次评估它的功能:

如果将非字符串对象分配给任一变量,则每次解释器准备读取新的交互式命令时,都会重新评估其 str() ;这可用于实现动态提示。

那么现在很明显,你应该让它动态!使用一种方法创建一个对象__str__,您可以在其中放置您想要的任何逻辑:

class Prompt:
    def __str__(self):
        # Logic to randomly determine string
        return string

您也可以随时进行更改或将内容插入到此类中。因此,例如,您可以拥有一个Prompt附加或更改的消息列表,这将影响控制台消息。

于 2015-11-12T10:31:36.320 回答
21

试试这个:

>>> import sys
>>> import random
>>> class RandomPrompt(object):
...     prompts = 'hello >', 'hi >', 'hey >'
...     def __repr__ (self): return random.choice(self.prompts)
... 
>>> sys.ps1 = RandomPrompt()
hello >1
1
hi >2
2
于 2015-11-12T10:31:01.260 回答
19

为了改变提示,我们使用

>>>import sys
>>>sys.ps1 = '=>'
=>

现在随机执行的方法是这样的:

import random
import sys

random_prompts = ['->', '-->', '=>', 'Hello->']
sys.ps1 = random.choice(random_prompts)

要在您的 python 解释器启动时执行此操作,您可以遵循本指南:https ://docs.python.org/2/tutorial/appendix.html#the-interactive-startup-file

于 2015-11-12T10:23:13.323 回答
8

好问题。>>>提示是sys.ps1in ,...in sys.ps2。下一个问题是如何随机更改它。就像手动更改它的演示一样:

>>> import sys
>>> sys.ps1 = '<<<'
<<<sys.ps1 = '<<< '
<<< sys.ps2 = '.?. '
<<< for i in line:
.?. 
于 2015-11-12T10:22:20.250 回答