Python 凯撒密码蟒蛇

Python 凯撒密码蟒蛇,python,Python,我最近做了一个作业,我的教授说它不是100%正确的,但我不知道还有什么办法可以解决这个问题。他对我的hw的回答是29或55。不要使用ord,而是使用字母表字符串中字母的索引。现在我对编程非常陌生,所以任何一条建议都会有所帮助。我需要你帮我弄清楚该怎么做 代码: 下面是代码的改进版本,它使用建议的索引: def circularShift(text, key): ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" shiftedTextSoFar ="

我最近做了一个作业,我的教授说它不是100%正确的,但我不知道还有什么办法可以解决这个问题。他对我的hw的回答是29或55。不要使用ord,而是使用字母表字符串中字母的索引。现在我对编程非常陌生,所以任何一条建议都会有所帮助。我需要你帮我弄清楚该怎么做

代码:


下面是代码的改进版本,它使用建议的索引:

def circularShift(text, key):
    ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    shiftedTextSoFar =" "
    # you can also change text to upper during for/loop
    for letter in text.upper():
        # should do a try/except here really in case user input invalid text
        # using string index to return index value
        # using (key % len(ALPHABET)) will reduce key length of any 26's multiples
        shifted = ALPHABET.index(letter) + (key % len(ALPHABET))

        # if after adjusting shifted is out of index, reduce by 26 i.e len(ALPHABET)
        if shifted > len(ALPHABET):
            shifted -= len(ALPHABET)
        # Python already has -ve index taken care, ie. ALPHABET[-1] = 'Z'
        shiftedTextSoFar += ALPHABET[shifted]
    return shiftedTextSoFar

print (circularShift("MOLLOY", 29)) #SHOULD PRINT PROORB
print (circularShift("PROOB", 55)) # SHOULD PRINT MOLLOY
 PROORB
 SURRE

这里是Python 3中的一个例子,也可以看看其他答案,它们的实现不是很短,可以帮助您解决自己的代码问题。29或55个位置的移位是没有用的,但是如果这个输入是合法的,那么您需要使用模:key=key%26。@nicolernone,然后您可以删除try/except块,我将更新答案。很抱歉,这很麻烦,但它似乎不起作用,我正在试图找出问题所在,但一旦我运行了程序,它就空了。@Nicolernone,对,我在删除try/except时不小心删除了shiftedTextSoFar+=ALPHABET[shifted]行。现在,text=z,key=1的updatedd行为会导致indexer错误:字符串索引超出范围。键为2的z表示“b”,键为0的z表示“z”。python新手,所以我不确定这是怎么回事。编辑我认为错误在'if shift>lenALPHABET'应该是>=?
def circularShift(text, key):
    ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    shiftedTextSoFar =" "
    # you can also change text to upper during for/loop
    for letter in text.upper():
        # should do a try/except here really in case user input invalid text
        # using string index to return index value
        # using (key % len(ALPHABET)) will reduce key length of any 26's multiples
        shifted = ALPHABET.index(letter) + (key % len(ALPHABET))

        # if after adjusting shifted is out of index, reduce by 26 i.e len(ALPHABET)
        if shifted > len(ALPHABET):
            shifted -= len(ALPHABET)
        # Python already has -ve index taken care, ie. ALPHABET[-1] = 'Z'
        shiftedTextSoFar += ALPHABET[shifted]
    return shiftedTextSoFar

print (circularShift("MOLLOY", 29)) #SHOULD PRINT PROORB
print (circularShift("PROOB", 55)) # SHOULD PRINT MOLLOY
 PROORB
 SURRE