我已经编写了近2天的编码,但是无法得到它。我试图找到两个不同的位。
代码#1 所以这个将列出字母,但不会将其更改为数字(a-> 1,b-> 2,等等)
import re
text = input('Write Something- ')
word = '{}'.format(text)
for letter in word:
print(letter)
#lists down
Outcome-
Write something- test
t
e
s
t
然后我有这个代码将字母改成数字,但我还没能把它转换成字母。 代码#2
u = input('Write Something')
a = ord(u[-1])
print(a)
#converts to number and prints ^^
enter code here
print('')
print(????)
#need to convert from numbers back to letters.
Outcome:
Write Something- test
116
如何通过(测试)发送文本并将其转换为设置数字(a-> 1,b-> 2)或随机数,将其保存为.txt文件并能够回去看看它吗?
答案 0 :(得分:0)
只需使用dictionary
:
letters = {'a': 1, 'b': 2, ... }
在循环中:
for letter in word:
print(letters[letter])
答案 1 :(得分:0)
您在此尝试实现的目标称为" caesar encryption"。
例如,您可以说:A = 1,a = 2,B = 3,B = 4等......
那么你会有一个"键"哪个"转移"这些信。让我们说关键是" 3",所以你要将所有字母3个数字向上移动,你最终得到:A = 4,a = 5,B = 6,b = 7等...这当然只是进行凯撒加密的一种方式。这是最基本的例子。你也可以说你的关键是" G",它会给你:
A = G,a = g,B = H,b = h等。或者 A = G,a = H,B = I,b = J等......
希望你明白我在说什么。同样,这只是一个非常简单的示例方式。
现在,对于您的程序/脚本,您需要定义此密钥。如果密钥应该是可变的,则需要将其保存在某处(将其写下来)。把你的单词放在一个字符串中,检查并转换每个字母并将其写入一个新的字符串。
然后你可以说(伪代码!):
var key = READKEYFROMFILE;
string old = READKEYFROMFILE_OR_JUST_A_NORMAL_STRING_:)
string new = "";
for (int i=0, i<old.length, i++){
get the string at i;
compare with your "key";
shift it;
write it in new;
}
希望我能帮到你。
编辑:
你也可以使用字典(就像其他答案所说的那样),但这是一种非常静态(但很容易)的方式。
另外,也许可以观看有关编程的一些指南/教程。你似乎没有经验。此外,谷歌&#34;凯撒加密&#34;更好地理解这个主题(非常有趣)。
EDIT2:
好的,基本上是这样的:
你有一个变量,名为&#34; key&#34;在这个变量中,你存储你的密钥(你理解我上面写的密钥和东西?)
然后你有一个字符串变量,名为&#34; old&#34;。还有一个名叫&#34; new&#34;。
在旧版本中,您编写要转换的字符串。 新的将是空的。
然后你做一个&#34; for循环&#34;,这就像&#34; .length&#34;你老了&#34;串。 (这意味着如果你的句子有15个字母,那么循环将经历15次,并且总是计算小的&#34; i&#34;变量(来自for循环)。
然后你需要尝试从#34; old&#34; (并将其保存在另一个可用的中,例如char temp = ""
)。
在此之后,您需要比较当前的字母并决定如何移动它。 如果这样做,只需将转换后的字母添加到&#34; new&#34;串。
这是一些更精确的伪代码(它不是python代码,我不熟悉python),btw char代表&#34;字符&#34; (字母):
var key = g;
string old = "teststring";
string new = "";
char oldchar = "";
char newchar = "";
for (int i=0; i<old.length; i++){
oldchar = old.charAt[i];
newchar = oldchar //shift here!!!
new.addChar(newchar);
}
希望我能帮助你;)
EDIT3:
也许还要看看这个:
https://inventwithpython.com/chapter14.html
答案 2 :(得分:0)
转换为符号代码并返回字符:
text = input('Write Something')
for t in text:
d = ord(t)
n = chr(d)
print(t,d,n)
写入文件:
f = open("a.txt", "w")
f.write("someline\n")
f.close()
从文件中读取行:
f = open("a.txt", "r")
lines = f.readlines()
for line in lines:
print(line, end='') # all lines have newline character at the end
f.close()
请参阅Python 3的文档:https://docs.python.org/3/
答案 3 :(得分:0)
以下是几个例子。我的方法涉及将字符映射到用零填充的整数的字符串表示,因此使用str.zfill
长度为3个字符。
例如0 -> '000', 42 -> '042', 125 -> '125'
这使得将一串数字转换回字符变得更加容易,因为它将会有很多3个
实施例
from string import printable
#'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
from random import sample
# Option 1
char_to_num_dict = {key : str(val).zfill(3) for key, val in zip(printable, sample(range(1000), len(printable))) }
# Option 2
char_to_num_dict = {key : str(val).zfill(3) for key, val in zip(printable, range(len(printable))) }
# Reverse mapping - applies to both options
num_to_char_dict = {char_to_num_dict[key] : key for key in char_to_num_dict }
以下是将字符映射到数字的两组词典。第一个选项使用随机数,例如'a' = '042', 'b' = '756', 'c' = '000'
问题是你可以使用它一次,关闭程序然后下次映射绝对不匹配。如果要使用随机值,则需要将字典保存到文件中,以便打开以获取密钥。
第二个选项创建一个字典,将字符映射到数字并维护顺序。因此它将遵循序列,例如'a' = '010', 'b' = '011', 'c' = '012'
每次。
现在我已经解释了这里的映射选择是在
之间进行转换的功能def text_to_num(s):
return ''.join( char_to_num_dict.get(char, '') for char in s )
def num_to_text(s):
slices = [ s[ i : i + 3 ] for i in range(0, len(s), 3) ]
return ''.join( num_to_char_dict.get(char, '') for char in slices )
使用示例(使用选项2字典)
>>> text_to_num('Hello World!')
'043014021021024094058024027021013062'
>>> num_to_text('043014021021024094058024027021013062')
'Hello World!'
最后,如果您不想使用字典,那么您可以使用ord
和chr
继续使用零填充方法填充数字
def text_to_num2(s):
return ''.join( str(ord(char)).zfill(3) for char in s )
def num_to_text2(s):
slices = [ s[ i : i + 3] for i in range(0, len(s), 3) ]
return ''.join( chr(int(val)) for val in slices )
使用示例
>>> text_to_num2('Hello World!')
'072101108108111032087111114108100033'
>>> num_to_text2('072101108108111032087111114108100033')
'Hello World!'