我正在尝试执行4个步骤,要求用户提供“关键字符”和字符串,然后大写字符串,然后从字符串中删除所有关键字符实例。这些步骤中的每一个都应该是自己的功能。但是,步骤3和4依赖于访问步骤1和2中位于函数中的变量。
我已经阅读了一些有关以下内容的主题... How to access the variables declared inside functions in 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句子大写字母中的未定义名称短语输入和def remove_key_character中的未定义名称key_character
答案 0 :(得分:2)
您缺少的是,返回值必须存储在另一个变量中。 例如,
def test():
x = 1
return x
def main():
z = test()
print(z)
main()
该程序将输出:
1
您必须将函数的输出作为 parameters 传递给不同函数的后续调用。我已经对您的代码进行了重新设计,使其可以像这样工作。
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()
答案 1 :(得分:0)
如果len(key_character)!= 1: get_key_character()
在这种情况下,您的函数不会return
任何内容(因此隐式返回None
)。您想return get_key_character()
(或者可能更有用的方法是进行重构以避免递归,即添加一个while
循环并在收到有效字符时退出,而不是让函数本身调用直到收到有效字符)。
通常,应避免使用全局变量。每当函数返回有用的内容时,调用代码应将该值分配给 local 变量。如果需要将该值传递给另一个函数,请使该函数将参数接受到其自身的另一个 local 变量中。