如何在同一行上打印字符?

时间:2017-05-11 12:51:37

标签: python cs50

我正在尝试在同一行上打印密文。当我运行程序时,所有字符都打印到下一行。我该怎么做?

#!/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()

3 个答案:

答案 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()而不指定打印应该如何结束它将自动以换行符结束。正如您在我提供的版本中所看到的,您可以使用此想法轻松合并换行符。

干杯