首页 > 解决方案 > 如何访问函数内部的变量

问题描述

我正在尝试执行 4 个步骤,向用户询问“关键字符”和字符串,然后将字符串大写,然后从字符串中删除关键字符的所有实例。这些步骤中的每一个都应该是它自己的功能。但是,第 3 步和第 4 步依赖于访问位于第 1 步和第 2 步的函数中的变量。

我已经阅读了一些关于此的主题,例如以下内容... 如何访问在python函数中声明的变量 ...这表明您必须在定义变量后“返回”变量,但我已经做到了(我想想),它并没有改变任何东西。

def main():
    get_key_character()
    get_string()
    sentence_capitalizer()
    remove_key_character()

def get_key_character():
    key_character=str(input("Please enter a SINGLE character to act as key? "))
    if len(key_character)!=1:
        get_key_character()
    else:
        return key_character

def get_string():
    phrase_input=str(input("Please enter a phrase or sentence >=4 and <=500 characters: "))
    if len(phrase_input) <4 or len(phrase_input)>500:
        get_string()
    else:
        return phrase_input

def sentence_capitalizer():
    import re
    sentence_capitalized=(re.sub(r"(^|\?|\.|\!)\s*(\w)", lambda q: q[0].upper(), phrase_input))
    return sentence_capitalized 

def remove_key_character():
    sentence_capitalized.replace(key_character, "")


main()

错误:def sentence_capitalizer 中未定义名称短语输入和 def remove_key_character 中未定义名称 key_character

标签: python

解决方案


您缺少的是返回的值必须存储在另一个变量中。例如,

def test():
    x = 1
    return x

def main():
    z = test()
    print(z)

main()

该程序将输出:

1

您必须将函数的输出作为参数传递给不同函数的后续调用。我已经修改了你的代码,让它像这样工作。

def main():
    key_character = get_key_character()
    phrase_input = get_string()
    sentence_capitalized = sentence_capitalizer(phrase_input)
    removed = remove_key_character(key_character, sentence_capitalized)
    print(removed)

def get_key_character():
    key_character=""
    while len(key_character) < 1:
        key_character=str(input("Please enter a SINGLE character to act as key? "))

    return key_character

def get_string():
    phrase_input=str(input("Please enter a phrase or sentence >=4 and <=500 characters: "))
    if len(phrase_input) <4 or len(phrase_input)>500:
        get_string()
    else:
        return phrase_input

def sentence_capitalizer(phrase_input):
    import re
    sentence_capitalized=(re.sub(r"(^|\?|\.|\!)\s*(\w)", lambda q: q[0].upper(), phrase_input))
    return sentence_capitalized 

def remove_key_character(key_character, sentence_capitalized):
    return sentence_capitalized.replace(key_character, "")


main()

推荐阅读