我正在编写一个代码,用于加密用户输入的String列表。这些列表将被加密,然后将被解密。 但是一旦它到达加密部分就会给我这个错误。
回溯(最近一次呼叫最后一次):文件" C:/Users/dana/Desktop/q2.py" ;,第16行,在 x = ord(c)TypeError:ord()需要一个字符,但是找到长度为4的字符串
我确信即使在解密部分也会出现同样的错误。
这是我的代码:
# Encryption
list1=[]
list2=[]
i = 0
while not(False):
plain_text = input ("Enter any string ")
if (plain_text !='q'):
list1.append(plain_text)
i=i+1
else:
break
encrypted_text = ""
for c in list1:
x = ord(c)
x = x + 1
c2 = chr(x)
encrypted_text = encrypted_text + c2
print(encrypted_text)
#Decryption
encrypted_text = "Uijt!jt!b!uftu/!BCD!bcd"
plain_text = ""
for c in encrypted_text:
x = ord(c)
x = x - 1
c2 = chr(x)
plain_text = plain_text + c2
print(plain_text)
list2=[encrypted_text]
print(plain_text)
print("the original msgs are :" , list1)
print("the encrypted msgs are :" ,list2)
答案 0 :(得分:2)
list1
包含用户为响应input
提示而输入的任何字符串。
然后你的第一个for循环遍历list1
。 c
采用list1
元素的值。然后在ord
上使用c
。我希望您的意图是在ord
的元素上使用c
。尝试在某处添加一个额外的循环。
另外,请考虑将代码组织到函数中。
答案 1 :(得分:1)
ord()采用单个字符
select m.*, p.type
from multipliers m inner join pushes p on m.push_id = p.id
where m.push_id =
(
select max(m2.push_id)
from multipliers m2 inner join pushes p2 on m2.push_id = p2.id
where p2.type = 'CONSTANT'
)
但是上面的循环返回字符串为C,这就是你得到错误的原因 更正代码
for c in list1:
x = ord(c)