2015-11-12 12 views
37

Es ist irgendwie langweilig, immer die Eingabeaufforderung >>> in Python zu sehen. Was wäre der beste Weg, das Prompt-Präfix zufällig zu ändern?Ändern Sie die Eingabeaufforderung zufällig im Python-Interpreter

Ich stelle mir eine Interaktion wie:

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

So stellen Sie sicher, dass Sie es vor, Fragen zu stellen, die Sitzungen sind Dolmetscher ... – jonrsharpe

+5

@jonrsharpe * „Warum mein Dolmetscher ist kein tobbaconist!?“ Ändern zurück * – SuperBiasedMan

+0

Im Gegenteil, ich glaube, darum, die Fragen heraus stehen noch mehr durch die Verwendung von Farben in der Eingabeaufforderung (zB sys.ps1 = '\ 033 [01; 31mwas? >>> \ 033 [00m') – mircealungu

Antwort

67

Nach den docs, wenn Sie ein Nicht-String-Objekt zu sys.ps1 zuweisen, dann wird es die str Funktion den es jedes Mal bewerten:

Wenn ein Nicht-String-Objekt Wird einer der Variablen zugewiesen, wird str() jedes Mal neu ausgewertet, wenn der Interpreter sich darauf vorbereitet, einen neuen interaktiven Befehl zu lesen; Dies kann verwendet werden, um eine dynamische Eingabeaufforderung zu implementieren.

Nun, jetzt ist es offensichtlich, Sie sollten es dynamisch machen! Machen Sie ein Objekt mit einem __str__ Methode, wo Sie jede Logik setzen, können Sie wollen:

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

Sie können auch Änderungen vornehmen oder die Dinge in dieser Klasse einfügen, wie Sie zu gehen. So könnten Sie beispielsweise eine Liste von Nachrichten in Prompt haben, an die Sie eine Nachricht anhängen oder ändern, und die sich auf die Konsolennachricht auswirkt.

8

Nizza Frage. Die Eingabeaufforderung >>> ist in sys.ps1, die ... in sys.ps2. Die nächste Frage wäre, wie man das zufällig ändert. So wie eine Demonstration sie von Hand ändern:

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

Für die Aufforderung zu verändern, benutzen wir

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

Nun ist der Weg, es zu tun zufällig so etwas wie dieses wäre:

import random 
import sys 

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

Um dies auszuführen, wenn Ihr Python-Interpreter startet, können Sie dieser Anleitung folgen: https://docs.python.org/2/tutorial/appendix.html#the-interactive-startup-file

22

Versuchen Sie folgendes:

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

'__repr __()' oder '__str __()'? – glglgl

+6

@glglgl, wird die Eingabeaufforderung durch Aufrufen von '__str __()' generiert. Wenn es nicht definiert ist, wird standardmäßig '__repr __()' verwendet. In diesem Fall spielt es keine Rolle. – Holloway

+0

@Holloway Du hast Recht, in meinen Gedanken hatte ich sie verwechselt ... – glglgl