मेरा उत्तर लगभग सही था, लेकिन कुछ वर्ण हैं जो मुझे चाहिए विशिष्ट कुंजी में नहीं हैं। मुझे कोई आइडिया नहीं है कि ऐसा क्यों हो रहा है।

def caesar_dict(shift_amount):
    list = {'a':'a', 'b':'b', 'c':'c', 'd':'d', 'e':'e', 'f':'f', 'g':'g', 'h':'h', 'i':'i', 'j':'j', 'k':'k', 'l':'l', 'm':'m', 'n':'n',
           'o':'o', 'p':'p', 'q':'q', 'r':'r', 's':'s', 't':'t', 'u':'u', 'v':'v', 'w':'w', 'x':'x', 'y':'y', 'z':'z'}
    for key in list.keys():
        if shift_amount > 0:
            if ord(key)+shift_amount > 122:
                list[key] = list[chr(ord(key) + shift_amount - 26)]
            else:
                list[key] = list[chr(ord(key) + shift_amount)]
        elif shift_amount < 0:
            if ord(key)+shift_amount < 97:
                list[key] = list[chr(ord(key) + shift_amount + 26)]
            else:
                list[key] = list[chr(ord(key) + shift_amount)]
        elif shift_amount == 0:
            return list
    return list

मेरा जवाब:

Testing caesar_dict() for 5: {'c': 'h', 'j': 'o', 'y': 'd', 'n': 's', 'd': 'i', 'k': 'p', 'u': 'z', 'b': 'g', 'w': 'g', 'e': 'o', 'f': 'p', 'r': 'g', 'm': 'g', 'z': 'o', 'q': 'v', 'g': 'l', 'x': 'h', 'p': 'z', 'a': 'p', 't': 'd', 'i': 's', 'v': 'p', 'o': 'd', 'h': 'g', 's': 'h', 'l': 'v'}
Testing caesar_dict() for 0: {'c': 'c', 'j': 'j', 'y': 'y', 'n': 'n', 'd': 'd', 'k': 'k', 'u': 'u', 'b': 'b', 'w': 'w', 'e': 'e', 'f': 'f', 'r': 'r', 'm': 'm', 'z': 'z', 'q': 'q', 'g': 'g', 'x': 'x', 'p': 'p', 'a': 'a', 't': 't', 'i': 'i', 'v': 'v', 'o': 'o', 'h': 'h', 's': 's', 'l': 'l'}
Testing caesar_dict() for -1: {'c': 'b', 'j': 'i', 'y': 'x', 'n': 'm', 'd': 'b', 'k': 'i', 'u': 't', 'b': 'a', 'w': 'v', 'e': 'b', 'f': 'b', 'r': 'q', 'm': 'l', 'z': 'x', 'q': 'p', 'g': 'b', 'x': 'v', 'p': 'o', 'a': 'x', 't': 's', 'i': 'h', 'v': 't', 'o': 'm', 'h': 'b', 's': 'q', 'l': 'i'}
0
Hongyu Li 1 जुलाई 2017, 22:30

2 जवाब

सबसे बढ़िया उत्तर

ऐसा इसलिए होता है क्योंकि आप एक ही समय में list का उपयोग कर रहे हैं और साथ ही list को संशोधित कर रहे हैं। तो कुछ मामलों में यह किसी विशेष स्थिति में मूल चरित्र का उपयोग नहीं कर रहा है बल्कि पहले से ही एक नया चरित्र है।

यदि आप एक नया परिणाम बनाते हैं तो यह अपेक्षा के अनुरूप काम करता है:

def caesar_dict(shift_amount):
    list = {'a':'a', 'b':'b', 'c':'c', 'd':'d', 'e':'e', 'f':'f', 'g':'g', 'h':'h', 'i':'i', 'j':'j', 'k':'k', 'l':'l', 'm':'m', 'n':'n',
           'o':'o', 'p':'p', 'q':'q', 'r':'r', 's':'s', 't':'t', 'u':'u', 'v':'v', 'w':'w', 'x':'x', 'y':'y', 'z':'z'}
    new_list = {}
    for key in list.keys():
        if shift_amount > 0:
            if ord(key)+shift_amount > 122:
                new_list[key] = list[chr(ord(key) + shift_amount - 26)]
            else:
                new_list[key] = list[chr(ord(key) + shift_amount)]
        elif shift_amount < 0:
            if ord(key)+shift_amount < 97:
                new_list[key] = list[chr(ord(key) + shift_amount + 26)]
            else:
                new_list[key] = list[chr(ord(key) + shift_amount)]
        elif shift_amount == 0:
            new_list = list
    return new_list
0
Simeon Visser 1 जुलाई 2017, 22:37
from string import ascii_lowercase

list_ = {char: char for char in ascii_lowercase}

आपके कोड की समस्या सूची के लिए वैश्विक को अधिलेखित कर रही है। लेकिन एक तरफ ध्यान दें, आप स्ट्रिंग मॉड्यूल का उपयोग करके उस शब्दकोश को बना सकते हैं। ascii_lowercase एक स्ट्रिंग 'abc...z' है। फिर आप इसे एक शब्दकोश समझ के साथ बस ज़िप कर सकते हैं।

0
syntaxError 2 जुलाई 2017, 00:00