如何用函数定义变量?

时间:2019-04-05 14:55:44

标签: python

我正在尝试制作一个将字符转换为莫尔斯电码并且还可以对其进行解码的程序。但是我一直试图从函数中定义变量。

def func1(message):
    message = message
    print(message)

然后:

message = function('test)

从此输出是消息为“无”

我希望“消息”从功能中获取输出。

这是我的实际代码:

def code(message):

    remove = ""

    message = message.lower()

    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 = "--.. "


    if "a" in message:
        message = message.replace("a", A)

    if "b" in message:
        message = message.replace("b", B)

    if "c" in message:
        message = message.replace("c", C)

    if "d" in message:
        message = message.replace("d", D)

    if "e" in message:
        message = message.replace("e", E)

    if "f" in message:
        message = message.replace("f", F)

    if "g" in message:
        message = message.replace("g", G)

    if "h" in message:
        message = message.replace("h", H)

    if "i" in message:
        message = message.replace("i", I)

    if "j" in message:
        message = message.replace("j", J)

    if "k" in message:
        message = message.replace("k", K)

    if "l" in message:
        message = message.replace("l", L)

    if "m" in message:
        message = message.replace("m", M)
    .........

然后:

if __name__ == "__main__":
    message = code("lol")
    print(message)
    print("\nDone!")

输出:

Morse Code: .-.. --- .-.. 
None

Done!

8 个答案:

答案 0 :(得分:0)

变量消息必须是全局的。 您可以将其初始化为空,然后在函数内部使用它,如下所示:

global message = message.lower()

答案 1 :(得分:0)

我们看不到函数的结尾,您返回了什么吗? 这样的功能结束了吗?

return message

如果函数不返回任何内容,则无法将其归因于变量。

答案 2 :(得分:0)

您可以对两种编码进行dict映射,

>>> morse_to_key
{'---': 'O', '--.': 'G', '-...': 'B', '-..-': 'X', '.-.': 'R', '--.-': 'Q', '--..': 'Z', '.--': 'W', '.-': 'A', '..': 'I', '-.-.': 'C', '..-.': 'F', '-.--': 'Y', '-': 'T', '.': 'E', '.-..': 'L', '...': 'S', '..-': 'U', '-.-': 'K', '-..': 'D', '.---': 'J', '.--.': 'P', '--': 'M', '-.': 'N', '....': 'H', '...-': 'V'}
>>> key_to_morse
{'A': '.-', 'C': '-.-.', 'B': '-...', 'E': '.', 'D': '-..', 'G': '--.', 'F': '..-.', 'I': '..', 'H': '....', 'K': '-.-', 'J': '.---', 'M': '--', 'L': '.-..', 'O': '---', 'N': '-.', 'Q': '--.-', 'P': '.--.', 'S': '...', 'R': '.-.', 'U': '..-', 'T': '-', 'W': '.--', 'V': '...-', 'Y': '-.--', 'X': '-..-', 'Z': '--..'}
>>> morse_to_key = {v:k for k,v in key_to_morse.items()}
>>> morse_to_key
{'---': 'O', '--.': 'G', '-...': 'B', '-..-': 'X', '.-.': 'R', '--.-': 'Q', '--..': 'Z', '.--': 'W', '.-': 'A', '..': 'I', '-.-.': 'C', '..-.': 'F', '-.--': 'Y', '-': 'T', '.': 'E', '.-..': 'L', '...': 'S', '..-': 'U', '-.-': 'K', '-..': 'D', '.---': 'J', '.--.': 'P', '--': 'M', '-.': 'N', '....': 'H', '...-': 'V'}

然后

>>> key_to_morse['a'.upper()]
'.-'
>>> morse_a = '.-'
>>> morse_to_key[morse_a]
'A'

这样,您就可以制作编码器和解码器了,

>>> def code(msg):
...   return ' '.join(key_to_morse[c.upper()] for c in msg) # using space to distinguish when decoding easier :)
... 
>>> code('lol')
'.-.. --- .-..'
>>> def decode(msg):
...   return ''.join(morse_to_key[c] for c in msg.split(' ')).lower() # # using space to distinguish when decoding
... 
>>> decode('.-.. --- .-..')
'lol'

答案 3 :(得分:0)

首先,您需要一个简单的dict来将字母映射到它们的摩尔斯电码等效项。请注意,此表不包含空格:

morse_code = {
    "A": ".-",
    "B": "-...",
    # etc
}

现在,您的编码功能应循环遍历传入的消息,一次一个字符,并获取该字母的相应摩尔斯电码。

# Bad practice, but see below
def code(message):
    coded_message = ""
    for c in message:
        coded_message += morse_code[c]
    return coded_message

您还返回结果,而不是立即打印结果,以便调用者可以决定如何处理结果。

message = code("test")

上面的实现不是很有效,因为重复添加到字符串的末尾要求您不断将以前的值复制到新值中。相反,您应该使用join方法

def code(message):
    return ["".join([morse_code[c] for c in message])]

通过使用" "而不是""作为分隔符字符串,可以带来更多好处,如果需要的话,可以更轻松地在输出中添加空格。

def code(message):
    return [" ".join([morse_code[c] for c in message])]

答案 4 :(得分:0)

您应该制作一个摩尔斯电码字符串列表,然后创建一个函数,该函数从字母表中的字母列表中获取值x,然后将其从摩尔斯电码列表中转换为值x。使for循环遍历函数中提交的字符串的每个字母。

答案 5 :(得分:0)

我尝试了以下功能,对我来说很好用。

def func1(message): message = message print(message) message = func1('test') 结果:测试。

以及您发布的主要代码需要返回消息以查看结果或打印消息。下面是修改后的代码,

` def代码(消息):

remove = ""

message = message.lower()

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 = "--.. "


if "a" in message:
    message = message.replace("a", A)

if "b" in message:
    message = message.replace("b", B)

if "c" in message:
    message = message.replace("c", C)

if "d" in message:
    message = message.replace("d", D)

if "e" in message:
    message = message.replace("e", E)

if "f" in message:
    message = message.replace("f", F)

if "g" in message:
    message = message.replace("g", G)

if "h" in message:
    message = message.replace("h", H)

if "i" in message:
    message = message.replace("i", I)

if "j" in message:
    message = message.replace("j", J)

if "k" in message:
    message = message.replace("k", K)

if "l" in message:
    message = message.replace("l", L)

if "m" in message:
    message = message.replace("m", M)
print(message)

mes = code(“ hello”) ` 结果: …… .- .. .- .. o

如果您还有任何疑问,请告诉我,我很乐意为您提供帮助。

答案 6 :(得分:0)

def code(message: str) -> str:
    mapping = {
        "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": "--..",
    }

    return " ".join(mapping[i] for i in message.upper())


if __name__ == "__main__":
    message = code("lol")
    print(message)

输出

.-.. --- .-..

答案 7 :(得分:-2)

您需要在代码函数的末尾return message才能返回结果。 Python中的所有函数都隐式返回None,因此没有return语句将意味着函数的结果为None,并且该结果将分配给变量。

您可以在此处了解有关功能的信息:https://www.python-course.eu/python3_functions.php