繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM