- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在下面的第一个 For 循环中,代码成功地将字母 num 位向右移动。问题出在第二个 For 循环中,它并没有像预期的那样完全反转。我在下面包含了输出。任何意见,将不胜感激。谢谢
def cipher(message):
num = int(input())
final = []
finalReverse = []
for i in message:
if i.isalpha():
i = chr(ord(i)+num)
final.append(i)
if not i.isalpha():
final.append(i)
final = ''.join(map(str, final))
print(final)
for i in final:
if chr(ord(i)-num).isalpha:
x = chr(ord(i)-num)
finalReverse.append(x)
if not chr(ord(i)).isalpha:
finalReverse.append(char(ord(i)))
finalReverse = ''.join(map(str, finalReverse))
print(finalReverse)
cipher(“《纽约时报》在纽约市。”)
输出:(我输入 num 为数字 3)
第一个 For 循环的输出:Wkh Qhz\run Wlphv lv lq Qhz\run Flw||。
第二个 For 循环的输出:TheNewYYorkTimesisinNewYYorkCityy+
预期第二个 For 循环的输出:《纽约时报》位于纽约市。
最佳答案
这里有几个问题。
您应该使用else
.
您关注if <condition>:
与 if not <condition>:
。相反,使用 else:
if i.isalpha():
i = chr(ord(i)+num)
final.append(i)
else:
final.append(i)
这不仅仅是装饰性的......因为你改变了 i
在 if
block ,两者都有可能 if
和if not
block 在单次迭代中运行。使用else
解决了这个问题(而且是更好的风格)。
您忘记调用isalpha
在解密部分
您需要将括号添加到 isalpha
的末尾调用解密部分,否则仅 if
block 将永远运行(因为方法或函数对象始终被认为是 true)。
if chr(ord(i)-num).isalpha():
...
您在解密中使用了错误的变量 else
循环
您正在追加 x
到解密部分的 else
中的列表阻止,但是x
仅在 if
中有意义堵塞。使用i
.
if chr(ord(i)-num).isalpha():
x = chr(ord(i)-num)
finalReverse.append(x)
else:
finalReverse.append(i)
修复这些问题应该会成功生成您的原始消息。
关于python - 凯撒密码Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48749806/
我刚刚开始学习 C 语言类(class),并且遇到了命令行参数的问题。分配是这样的(还有更多,但这是开头有关命令行参数的部分): - 你的程序必须接受一个命令行参数,一个非负整数。 - 如果您的程序在
我需要检查命令行参数中是否有非数字字符。例如: ./problem 20x 应该打印出“不是数字”,因为它包含一个 x。我的代码似乎没有循环遍历命令行参数中的所有字符。 我基本上尝试了不同类型的循环,
这里我有从标准输入将字符流输入到数组中的代码。然后将该数组转换为二维数组。然后,它将该数组从行列顺序更改为列行顺序。然后它打印出创建凯撒移位加密的新数组。我遇到的问题是我的数组开始使用第二个用户输入的
我有点被这个问题困住了。当我运行程序时,由于某种原因,循环经过 z 的所有字母都不会打印。问题来自这个链接:http://docs.cs50.net/2016/x/ap/problems/caesar
我是一名优秀的程序员,十分优秀!