【问题标题】:Randomly change the prompt in the Python interpreter在 Python 解释器中随机更改提示
【发布时间】:2016-02-13 15:11:38
【问题描述】:

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

我想像这样的互动:

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

【问题讨论】:

  • 在询问包括口译会话的问题之前,请确保将其改回...
  • @jonrsharpe “为什么我的口译员不是烟民!?”
  • 你甚至可以随意搭配烟草店的颜色。
  • 分页@HovercraftFullOfEels
  • 将所有随机提示保持固定宽度可能是个好主意。除非您喜欢计算空格的额外挑战,并在事情看起来不整齐时忽略以确保您正确缩进。

标签: python prompt python-interactive


【解决方案1】:

根据docs,如果你给sys.ps1赋值一个非字符串对象,那么它每次都会评估它的str函数:

如果将非字符串对象分配给任一变量,则其 str() 为 每次口译员准备阅读新的 交互式命令;这可以用来实现动态提示。

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

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

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

【讨论】:

    【解决方案2】:

    试试这个:

    >>> 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
    

    【讨论】:

    • __repr__()__str__()?
    • @glglgl,提示是调用__str__()生成的。如果未定义,则默认为__repr__(),因此在这种情况下,哪个都没有关系。
    • 只是为了确定:你为什么要在这个例子中写一个类。 def RandomPrompt(): prompts = [...]; return choice(prompts) 不够吗?
    • 一个函数每次都会运行初始化。在这种特殊情况下,它不会很昂贵,但通常将初始化与实际代码分开是一个好习惯。
    【解决方案3】:

    为了改变提示,我们使用

    >>>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

    【讨论】:

      【解决方案4】:

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

      >>> import sys
      >>> sys.ps1 = '<<<'
      <<<sys.ps1 = '<<< '
      <<< sys.ps2 = '.?. '
      <<< for i in line:
      .?. 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-02
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        相关资源
        最近更新 更多