- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经为我的 Python 类完成了我应该完成的任务,但是我似乎无法打印最终结果。该任务的目的是创建一个程序:
问题是我的代码不会打印结果,我看不出有什么问题。
这是我的代码:
Choice = input("Would you like to decrypt or encrypt a message? Please
enter 'E' or 'D': ")
Message = input("Enter text to Cipher: ")
Offset = int(input("Please enter your offset: "))
Encrypt = ''
Decrypt = ''
if Choice == "e".upper():
for character in Message:
x = ord(character)
Encrypt += chr(Offset + x)
print (Encrypt)
if Choice == "d".upper():
for character in Message:
x = ord(character)
Decrypt += chr(Offset - x)
print (Decrypt)
为什么我没有得到 print()
的输出?
最佳答案
首先,很明显:这些不是您正在寻找的路径
您的“if Choice”选择错误,因此您可能永远不会执行您期望的路径。您从不强制输入,因此您的 if
语句需要是 if Choice.upper() == 'E':
或者更明确地说,if (选择 == 'E') 或 (选择 == 'e'):
。我在下面的示例中使用了两者。
接下来,您的实际程序:凯撒密码 ROTATE
您没有遵守凯撒密码的旋转性质。 Ceaser 密码就像 12 小时制。 “11 点后 4 小时”不是“15 点钟”,而是“3 点钟”,在 Python 中是:(11 + 4) % 12
考虑到这一点,ASCII 字符的范围是多少?那里有多少?您是否包括非字符但可打印的内容?您是否包括整个范围的有效 Unicode? (顺便说一下,包括 unicode 可能非常接近于不可能,因为值是如何从页面构造的性质,以及其他问题。)
所以简单的情况是 ASCII 值,32 到 126 之间的可打印字符。(这里有一个图表供引用:ASCII Table)
这为我们提供了有效集中的 126 - 32 = 94 个字符,类似于 12 小时制中的 12 个有效小时。这也意味着我们的底值为 32,这意味着任何东西都不能低于该值。
我们的密码程序看起来像这样:
解密过程就是逆运算。
Choice = input("Would you like to decrypt or encrypt a message?\nPlease enter 'E' or 'D': ")
Message = input("Enter text to Cipher: ")
Offset = int(input("Please enter your offset: "))
Encrypt = ''
Decrypt = ''
if (Choice == 'e') or (Choice == 'E'):
for character in Message:
x = ord(character) - 32
Encrypt += chr(((Offset + x) % 94) + 32)
print(Encrypt)
if Choice.upper() == 'D':
print("You didn't think I was going to do all your homework for you, right?")
显然,这可以进行调整以扩大/缩小输入或输出的有效范围。大多数凯撒密码示例仅使用 [A-Z] 作为有效字符,因此范围为 26,底部值为 65,您必须对 Message.upper()
等执行操作。但原理是一样的。
关于python - 凯撒密码 - 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33589719/
我刚刚开始学习 C 语言类(class),并且遇到了命令行参数的问题。分配是这样的(还有更多,但这是开头有关命令行参数的部分): - 你的程序必须接受一个命令行参数,一个非负整数。 - 如果您的程序在
我需要检查命令行参数中是否有非数字字符。例如: ./problem 20x 应该打印出“不是数字”,因为它包含一个 x。我的代码似乎没有循环遍历命令行参数中的所有字符。 我基本上尝试了不同类型的循环,
这里我有从标准输入将字符流输入到数组中的代码。然后将该数组转换为二维数组。然后,它将该数组从行列顺序更改为列行顺序。然后它打印出创建凯撒移位加密的新数组。我遇到的问题是我的数组开始使用第二个用户输入的
我有点被这个问题困住了。当我运行程序时,由于某种原因,循环经过 z 的所有字母都不会打印。问题来自这个链接:http://docs.cs50.net/2016/x/ap/problems/caesar
我是一名优秀的程序员,十分优秀!