公式只将字符串视为字符串而不是变量

时间:2017-02-17 03:59:51

标签: python python-3.x formula

我有一些代码,它接受用户输入并对其进行加密。它不是哈希公式,而只是一个简单的谜代码。代码简化是:

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

因为我希望代码将字符串更改为“加密”代码。

2 个答案:

答案 0 :(得分:2)

U中的

Hash是一个局部变量,而不是全局变量。

global U之上添加U = HashC可以解决问题。

修改全局变量是一个好习惯,因为它会产生副作用,而且常常会导致某种错误。因此,请在HashCHash中返回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)