我正在尝试在同一行上打印密文。当我运行程序时,所有字符都打印到下一行。我该怎么做?
#!/usr/bin/env python3
import cs50
import sys
def main():
if len(sys.argv) != 2:
print('caesar.py k')
exit(1)
k = int(sys.argv[1])
print('plaintext: ', end = '')
s = cs50.get_string()
print('ciphertext: ', end = '')
for i in range(len(s)):
c = s[i]
if str.isupper(c):
cipher = (((ord(c) - 65) + k) % 26) + 65
print(chr(cipher))
elif str.islower(c):
cipher = (((ord(c)- 97) + k) % 26) + 97
print(chr(cipher))
else:
print(chr(c))
exit(0)
if __name__ == "__main__":
main()
答案 0 :(得分:2)
错误来自
c - chr(65)
如果查看chr(65)
的类型,它实际上是一个字符串。
>>> type(chr(65))
str
你得到的TypeError只是告诉你不能从另一个字符串中减去一个字符串。
您可能希望查看使用ord
而不是返回表示字符的Unicode代码点的整数。
此外
for i in range(len(s)):
c = s[i]
是一个python反模式,可以简化
for c in s:
print(c) # c is your character
因为s是可迭代的
答案 1 :(得分:1)
不用担心,我回答了这个问题。我在打印语句的末尾添加了end = ''
。
答案 2 :(得分:0)
我认为@Jack Evans是最好的风格。但是,为了您的兴趣,我做了一些修改以帮助回答您的问题(希望如此):
#!/usr/bin/env python3
import cs50
import sys
def main():
if len(sys.argv) != 2:
print('caesar.py k')
exit(1)
k = int(sys.argv[1])
print('plaintext: ', end = '')
s = cs50.get_string()
print(s)
print('ciphertext: ', end = '')
for i in range(len(s)):
c = s[i]
if str.isupper(c):
cipher = (((ord(c) - 65) + k) % 26) + 65
print(chr(cipher), end= '')
elif str.islower(c):
cipher = (((ord(c)- 97) + k) % 26) + 97
print(chr(cipher), end= '')
else:
print(chr(c), end= '')
print()
exit(0)
if __name__ == "__main__":
main()
以下是有人执行脚本的示例输出:
./name_of_file 3
字符串为:
howdy
结果将是:
plaintext: howdy
ciphertext: krzgb
要直接回答您的问题,只需更改打印密码字符即可:
print(chr(cipher))
到
print(chr(cipher), end= '')
在Python中,使用print()而不指定打印应该如何结束它将自动以换行符结束。正如您在我提供的版本中所看到的,您可以使用此想法轻松合并换行符。
干杯