2013-08-27 45 views
5

我創建Python中的凱撒換檔程序,見下圖:

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) 

我必須轉移下面的代碼:

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

正如你所看到的,它包含註釋。

如何作出這樣的代碼轉換成字符串?這些評論從給予任何輸出停止我的Python腳本。

感謝

回答

4

TRIPPLE引用它:

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

三重引號的字符串可以跨越多行,以及在他們的意見。

+0

謝謝,這是有效的。簡直不敢相信我會這麼做。多行字符串。感謝iCodez。將接受爲正確答案。 – BubbleMonster

+0

如果您需要處理任意輸入(而不僅僅是所示的輸入示例),則三重報價方法通常不起作用。例如,如果代碼包含被解釋爲Python轉義序列的序列,比如'\ n'(換行符),'\ u0020'(unicode空間)或許多其他序列,則不會得到逐字逐字符版本的字符原始代碼。你需要在三引號之外使用前導'r'。查看我的答案,瞭解此行爲的一個示例。 –

1

環繞三重引號中輸入文本:"""your code"""

+0

如果您需要處理任意輸入(不只是顯示的輸入示例),三重引用方法通常不起作用。例如,如果代碼包含被解釋爲Python轉義序列的序列,比如'\ n'(換行符),'\ u0020'(unicode空間)或許多其他序列,則不會得到逐字逐字符版本的字符原始代碼。你需要在三引號之外使用前導'r'。查看我的答案,瞭解此行爲的一個示例。 –

1

如果您的源字符串包含Python轉義字符,三引號方法將不起作用。例如,序列\n表示換行符,並且(正確)解釋爲一個字符,而不是兩個。

如果你想在你的輸入提供的所有字符都被捕獲爲-是,沒有逃脫/解釋一個通用的解決方案,通過領先的r使用原始字符串的方法引號外:

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

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

沒有特別的情況下擔心。