[英]How do I print the characters on the same line?
我正在尝试在同一行上打印密文。 现在,当我运行程序时,所有字符都被打印到下一行。 我该怎么做呢?
#!/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()
错误来自
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是可迭代的
不用担心,我回答了。 我在打印语句的末尾添加了end = ''
。
我认为@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()而不指定应如何结束打印,它将自动以换行符结尾。 正如您在我提供的版本中看到的那样,您可以使用此想法轻松合并换行符。
干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.