2013-08-27 7 views
5

Ho creato un programma di cambiamento caesar in python, vedere sotto:

from string import maketrans 

originalChar = (raw_input("Enter a letter: ")) 
numToInc = int(raw_input("Enter a number: ")) 
code = "" 

for x in originalChar: 
    newChar = (chr(ord(x) + numToInc)) 
    code = code + newChar 

transtab = maketrans(chr(32+numToInc), " ") 
print code.translate(transtab) 

devo spostare il seguente codice:

%%[email protected]_$^__#)^)&!_+]!*@&^}@[@%]()%+$&[([email protected]%+%$*^@$^!+]!&_#)_*}{}}!}_]$[%}@[{[email protected]#_^{* 
@##&{#&{&)*%(]{{([*}@[@&]+!!*{)!}{%+{))])[!^})+)$]#{*+^((@^@}$[**$&^{[email protected]#$%)[email protected](& 
+^!{%_$&@^!}$_${)$_#)!({@!)(^}!*^&!$%_&&}&_#&@{)]{+)%*{&*%*&@%$+]!*__(#!*){%&@++ 
!_)^$&&%#+)}[email protected]!)&^}**#!_$([$!$}#*^}$+&#[{*{}{((#$]{[$[$$()_#}[email protected]}^@_&%^*!){*^^_$^ 

Come si può vedere, contiene commenti.

Come faccio a fare quel codice in una stringa? I commenti si fermano mio script python dal dare alcun output.

Grazie

risposta

4

Tripple citarlo:

"""%%[email protected]_$^__#)^)&!_+]!*@&^}@[@%]()%+$&[([email protected]%+%$*^@$^!+]!&_#)_*}{}}!}_]$[%}@[{[email protected]#_^{* 
@##&{#&{&)*%(]{{([*}@[@&]+!!*{)!}{%+{))])[!^})+)$]#{*+^((@^@}$[**$&^{[email protected]#$%)[email protected](& 
+^!{%_$&@^!}$_${)$_#)!({@!)(^}!*^&!$%_&&}&_#&@{)]{+)%*{&*%*&@%$+]!*__(#!*){%&@++ 
!_)^$&&%#+)}[email protected]!)&^}**#!_$([$!$}#*^}$+&#[{*{}{((#$]{[$[$$()_#}[email protected]}^@_&%^*!){*^^_$^""" 

tripla citato stringhe possono estendersi su più righe così come hanno commenti in loro.

+0

Grazie, funziona. Non posso credere di non aver pensato di provarlo. Stringa multilinea. Grazie iCodez. Accetterà come risposta corretta. – BubbleMonster

+0

Se è necessario gestire input arbitrari (non solo l'esempio di input mostrato), l'approccio triple-quot non funziona in generale. Esempio, se il codice contiene sequenze interpretate come sequenze di escape Python come '\ n' (newline),' \ u0020' (spazio unicode) o molti altri, non si otterrà una versione testuale, carattere per carattere di il codice originale È necessario utilizzare un 'r' iniziale al di fuori delle virgolette. Vedi la mia risposta per un esempio di questo comportamento. –

1

Surround il testo di input tra virgolette triple: """your code"""

+0

Se è necessario gestire un input arbitrario (non solo l'esempio di input mostrato), l'approccio a tripla quota non funziona in generale. Esempio, se il codice contiene sequenze interpretate come sequenze di escape Python come '\ n' (newline),' \ u0020' (spazio unicode) o molti altri, non si otterrà una versione testuale, carattere per carattere di il codice originale È necessario utilizzare un 'r' iniziale al di fuori delle virgolette. Vedi la mia risposta per un esempio di questo comportamento. –

1

L'approccio con tripla citazione non funziona se la stringa di origine contiene caratteri di escape Python. Ad esempio, la sequenza \n significa newline e viene interpretata (correttamente) come un carattere, non due.

Se si desidera una soluzione generale in cui tutti i caratteri di cui nel vostro ingresso vengono catturate così come sono e senza sfuggire/interpretazione, utilizzare l'approccio stringa grezza tramite un leader r fuori delle citazioni:

>>> s = '\n\n\n' 
>>> print len(s) 
3 

vs.

>>> r = r'\n\n\n' 
>>> print len(r) 
6 

Nessun caso speciale di cui preoccuparsi.

Problemi correlati