python valueerror:chr()arg不在范围内(0x110000)

发布于 2025-01-22 15:33:43 字数 1148 浏览 3 评论 0原文

import enchant
message_decrypt= input("Enter the message you want to decrypt: ")
key= 0
def caesar_hack(message_decrypt,key):
    final_message=""
    d= enchant.Dict("en.US")
    f= d.check(message_decrypt)
    while f== False:
        for characters in message_decrypt:
            if ord(characters)<=90:
                if ord(characters)-key<ord("A"):
                    final_message= final_message+ chr(ord(characters)-key)
                else:
                    final_message= final_message+ chr(ord(characters)-key+26)
            else:
                if ord(characters)-key<ord("a"):
                    final_message=final_message+chr(ord(characters)-key)
                else:
                    final_message= final_message+chr(ord(characters)-key+26)
        key=key+1
        f= d.check(message_decrypt)
    else:
        print(final_message)
caesar_hack(message_decrypt, key)

为什么此代码不起作用? 我正在尝试使用蛮力技术进行凯撒密码黑客。我有一个错误如下

有人可以帮助修复此代码。

import enchant
message_decrypt= input("Enter the message you want to decrypt: ")
key= 0
def caesar_hack(message_decrypt,key):
    final_message=""
    d= enchant.Dict("en.US")
    f= d.check(message_decrypt)
    while f== False:
        for characters in message_decrypt:
            if ord(characters)<=90:
                if ord(characters)-key<ord("A"):
                    final_message= final_message+ chr(ord(characters)-key)
                else:
                    final_message= final_message+ chr(ord(characters)-key+26)
            else:
                if ord(characters)-key<ord("a"):
                    final_message=final_message+chr(ord(characters)-key)
                else:
                    final_message= final_message+chr(ord(characters)-key+26)
        key=key+1
        f= d.check(message_decrypt)
    else:
        print(final_message)
caesar_hack(message_decrypt, key)

Why doesn't this code work?
I'm trying to do a caesar cipher hack using the brute force technique. I get an error as below
Error

Can someone please help fix this code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾忌 2025-01-29 15:33:43

我必须进行一些调整以使您的代码工作,这是一个工作版本:

import enchant
message_decrypt= input("Enter the message you want to decrypt: ")
key= 0
def caesar_hack(message_decrypt,key):
    final_message=""
    d= enchant.Dict("en.US")
    f= d.check(message_decrypt)
    while f== False:
        for characters in message_decrypt:
            if ord(characters)<=90:
                if ord(characters)-key<ord("A"):
                    final_message= final_message+ chr(ord(characters)-key+26)  # The additional 26 should be here, not below
                else:
                    final_message= final_message+ chr(ord(characters)-key)
            else:
                if ord(characters)-key<ord("a"):
                    final_message=final_message+chr(ord(characters)-key+26)  # The additional 26 should be here, not below
                else:
                    final_message= final_message+chr(ord(characters)-key)
        key=key+1
        f= d.check(final_message)  # Check should be on final_message, not message_decrypt
        if not f:
            final_message = ""  # Need to reset the final_message if not matched
    else:
        print(final_message)
caesar_hack(message_decrypt, key)

我已经评论了我所做的主要更改。一个关键是在循环中检查final_message,而不是message_decrypt(如果没有匹配(如果没有匹配),请再次将其重置为下一个循环)。

另一个是,如果需要移动范围之外,则在字符序列中添加26。如果没有这样做,它就会生成不可打印的字符,因此检查失败而没有附魔错误。

There's a couple of tweaks I had to make to get your code to work, here's a working version:

import enchant
message_decrypt= input("Enter the message you want to decrypt: ")
key= 0
def caesar_hack(message_decrypt,key):
    final_message=""
    d= enchant.Dict("en.US")
    f= d.check(message_decrypt)
    while f== False:
        for characters in message_decrypt:
            if ord(characters)<=90:
                if ord(characters)-key<ord("A"):
                    final_message= final_message+ chr(ord(characters)-key+26)  # The additional 26 should be here, not below
                else:
                    final_message= final_message+ chr(ord(characters)-key)
            else:
                if ord(characters)-key<ord("a"):
                    final_message=final_message+chr(ord(characters)-key+26)  # The additional 26 should be here, not below
                else:
                    final_message= final_message+chr(ord(characters)-key)
        key=key+1
        f= d.check(final_message)  # Check should be on final_message, not message_decrypt
        if not f:
            final_message = ""  # Need to reset the final_message if not matched
    else:
        print(final_message)
caesar_hack(message_decrypt, key)

I've commented the main changes I made. One key one was checking final_message in the loop, not message_decrypt (and resetting it again for the next loop if no match).

The other was that your addition of 26 to the character ordinal if it was out of range needed to be moved. Without doing that, it was generating non-printable characters so the check was failing with an enchant error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文