我有一些代码,它接受用户输入并对其进行加密。它不是哈希公式,而只是一个简单的谜代码。代码简化是:
def Hash (string):
for x in range(0, len(string)):
if x == 0:
HashC = str(ord(string[x:x+1]))
else:
HashC = HashC+str(ord(string[x:x+1]))
print(HashC)
U = HashC
U = input("What do you want to hash? ")
Hash(U)
print(U)
带有打印的输出显示了转换中的最新情况。
> What do you want to hash? Test
> 84101
> 84101115
> 84101115116
> Test
我想要输出
> What do you want to hash? Test
> 84101
> 84101115
> 84101115116
> 84101115116
因为我希望代码将字符串更改为“加密”代码。
答案 0 :(得分:2)
U
中的 Hash
是一个局部变量,而不是全局变量。
在global U
之上添加U = HashC
可以解决问题。
但不修改全局变量是一个好习惯,因为它会产生副作用,而且常常会导致某种错误。因此,请在HashC
和Hash
中返回U = Hash(U)
。
答案 1 :(得分:1)
变量U
的范围位于函数之外。在功能块中分配U = HashC
时,块会将其分配给U
,但在功能块退出时,U
将恢复为其值input()
,在这种情况下为Test 。这类似于C中的按值传递,只有U
在功能块中可见,而不显式传递给它。此外,您必须将此值存储在U
中,因为字符串是不可变的,尽管如此您没有对string
进行更改
因此,您应该执行以下操作:
def Hash (string):
for x in range(0, len(string)):
if x == 0:
HashC = str(ord(string[x:x+1]))
else:
HashC = HashC+str(ord(string[x:x+1]))
print(HashC)
return HashC
U = input("What do you want to hash? ")
U = Hash(U)
print(U)