簡體   English   中英

Function 沒有正確調用?

[英]Function isn't called properly?

我有凱撒密碼加密的代碼,我正在嘗試在fancy_caesar() function 中調用cleanup() function,以便“清理”輸入關鍵字和消息。

#with just .upper()
my_string = ''

def string():
    my_string = input("Enter your string: ")
    res = cleanup()
    print(res)

def cleanup(self):
    res = ''
    _char = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    lower_char = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    all_char = _char + lower_char
    for ch in my_string:
        if ch in all_char:
            res += ch
    return (res.upper())


def swap(x, i, j):
    i, j = sorted((i, j))
    if i and j in range(len(x)):
        return x[:i] + x[j] + x[i+1:j] + x[i] + x[j+1:]
    else:
        return None   
def inputs():
    x = input('Enter your string: ')
    i = int(input('Enter the index of the first letter: '))
    j = int(input('Enter the 2nd index of the next letter: '))
    print(swap(x, i, j))


#print(swap(x, i, j))



def fancy_caesar(message, keyword, true_false_statement):
    count = 0
    while count == 0:
        true_false_statement = str(input("Type True if you want to encrypt.\nType false if you want to decrypt: "))
        if true_false_statement == 'true' or true_false_statement == 'True' or true_false_statement == 't' or true_false_statement == 'T':
            count = count +1
        elif true_false_statement == 'false' or true_false_statement == 'False' or true_false_statement == 'F' or true_false_statement == 'f':
            count = count + 1
        else:
            print('None')
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    translated_message = ""
    keyword_index = 0

    for character in message:
        if character in alphabet:
            number = alphabet.find(character)
            if true_false_statement == 'true' or true_false_statement == 'True' or true_false_statement == 't' or true_false_statement == 'T':
                number = number + (ord(keyword[keyword_index]) - ord('a'))
            elif true_false_statement == 'false' or true_false_statement == 'False' or true_false_statement == 'F' or true_false_statement == 'f':
                number = number - (ord(keyword[keyword_index])) - ord('a')
            keyword_index += 1
            keyword_index = keyword_index % len(keyword)

            if number >= len(alphabet):
                number = number - len(alphabet)
            elif number < 0:
                number = number + len(alphabet)


            translated_message = translated_message + alphabet[number]

        else:
            translated_message = translated_message + character

    return (translated_message)



def main():
    message = input("Enter string you want to encrypt/decrypt: ")
    keyword = input('Keyword for encryption: ')
    true_false_statement = ''
    translated_message = fancy_caesar(message, keyword, true_false_statement)
    print(translated_message)


main()

我嘗試將self添加到cleanup() function 中,但它根本不起作用,因為我在輸出中除了空白外沒有得到任何東西。

def fancy_caesar(message, keyword, true_false_statement):
    message = cleanup(message)
    keyword = cleanup(keyword)
    count = 0
    while count == 0:

我嘗試在main() function 中調用cleanup() ,我得到了相同的結果。

這可能是由於def string()中未調用my_string

我最終將它排除在cleanup() function 之外,以便我將 function 用於fancy_caesar 我可以獲得解決這些問題的任何提示嗎?

output 應該導致輸入字符串全部大寫,沒有空格或特殊字符,這是由cleanup function 完成的。

cleanup()應該將要清理的字符串作為參數。

def cleanup(my_string):
    res = ''
    _char = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    lower_char = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    all_char = _char + lower_char
    for ch in my_string:
        if ch in all_char:
            res += ch
    return (res.upper())

然后你像這樣使用它:

some_string = cleanup(some_string)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM