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

2024-07-04 17:12:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小代码,它接受用户输入并加密。这不是一个哈希公式,但它只是一个简单的谜代码。简化的代码是:

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

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


Tags: to代码用户testyoustringhashdo
2条回答

变量U的作用域位于函数之外。在函数块中赋值U = HashC时,该块将其赋值给U,但在本例测试中,当函数块退出时,U恢复为其值input()。这与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)

Hash中的U是局部变量,而不是全局变量

在上面加上global UU = HashC可以解决这个问题

但是最好不要修改全局变量,因为它会产生副作用,并且常常会导致某种错误。所以在HashU = Hash(U)中返回HashC

相关问题 更多 >

    热门问题