在程序

时间:2017-04-09 18:10:58

标签: python python-3.x caesar-cipher

您好我很难在我的计划中加入超过1个班次。目标是为每个角色分配一个班次金额,如:

statement = input("Enter string: ")
shift = input("Enter shift amounts: ")

例如,如果

statement = "Hello"

shift = 5 6 7 

如何将该5号分配给H,6分配给E,7分配给l,然后再分配5分至1分,7分配给o

我认为我需要把它变成一个列表,所以这就是我到目前为止所做的:

for char in statement:
    char[0] = shift[0]

1 个答案:

答案 0 :(得分:0)

试试这个:

#!/usr/bin/python

statement = raw_input("Enter string: ")
shift = raw_input("Enter shift amounts: ").split()

for index, char in enumerate(statement):
    if index < len(shift):
            print chr(ord(char) + int(shift[index])),
    else:   
            print char,

为Python 2编写,不对用户输入进行错误检查,但应该有效。

编辑:还有一个Python3版本,因为它看起来就像你正在使用的那样:

#!/usr/bin/python

statement = input("Enter string: ")
shift = input("Enter shift amounts: ").split()

for index, char in enumerate(statement):
    if index < len(shift):
            print(chr(ord(char) + int(shift[index])), end='')
    else:
            print(char, end='')

print()

在两个版本中,如果用户为shift提供的整数数小于字符串的大小,则假定移位值为0。 如果你想,你可以做一个测试,看看用户提供的移位整数的数量是否小于字符串的长度,并输出错误,或者再次询问用户输入。

编辑2:根据评论中的要求,此代码使移位重新启动而不是假设它为0:

#!/usr/bin/python

statement = input("Enter string: ")
shift = input("Enter shift amounts: ").split()

for index, char in enumerate(statement):
    index = index % len(shift)

    print(chr(ord(char) + int(shift[index])), end='')

print()

编辑3:根据评论中的要求,此代码确保用户输入仅为a-z或A-Z,并且在函数中。

#!/usr/bin/python

import sys
from string import ascii_letters as alphabet

def enc_string(statement, shift):

    # Make sure user entered valid shift values
    try:
        shift = [ int(val) for val in shift.split() ]
    except ValueError:
        print("Error: All shift values must be integers")
        sys.exit(1)

    # Make sure all chars in statement are valid
    for char in statement:
        if char not in alphabet:
            print("Error: all characters in string must be a-z or A-Z")
            sys.exit(1)

    # Start putting together result
    res = "Result: "

    # Convert statement
    for index, char in enumerate(statement):
        shift_to_use = shift[index % len(shift)]
        index_of_char = alphabet.index(char)

        index_of_new_char = (index_of_char + shift_to_use) % len(alphabet)

        res += alphabet[index_of_new_char]

    return res

statement = input("Enter string: ")
shift = input("Enter shift amounts: ")

print(enc_string(statement, shift))