Python 在不同的输入之后得到一个无返回的输入

Python 在不同的输入之后得到一个无返回的输入,python,string,python-3.x,Python,String,Python 3.x,大家好,使用下面的代码,在输入一个数字和一个字符后,它返回None。我对这件事一无所知。欢迎任何帮助。 我试着打印这些值,但一返回就改变了 import string def get_input_char(char): char = str.lower(input("Input a letter: ")) if not char in string.ascii_letters or char == "" or char == None: print("Charac

大家好,使用下面的代码,在输入一个数字和一个字符后,它返回None。我对这件事一无所知。欢迎任何帮助。 我试着打印这些值,但一返回就改变了

import string
def get_input_char(char):
    char = str.lower(input("Input a letter: "))
    if not char in string.ascii_letters or char == "" or char == None:
        print("Character " + char + " not valid. Try again.\n")
        char = str(get_input_char(char))
    else:
        return char
    print (char)

word_frag = ""
while True:
    word_frag += get_input_char("")
    print("\nThe current word fragment is " + word_frag)

如果函数一直失败,在
print
语句之后,它不会返回任何内容。函数返回的默认值是
None

,正如Mark指出的,问题是如果第一个输入的值无效,则不会返回任何值。您的代码中还有一些不太正确的地方:

  • 当循环更好时,使用递归测试有效值。这主要是因为与循环相比,调用函数需要大量开销。如果使用循环,则不需要为函数提供参数
  • 最好检查
    char是否为None
    而不是
    char==None
    。如果您正在测试的对象已被定制为比较等于
    None
    ,则检查是否相等可能会产生意外结果。检查身份(使用
    is
    )更可靠
  • 但是,根本不需要检查None,因为char始终是字符串
  • 您的代码意味着只需要一个字符,但实际上ascii_字母中包含的任何字符串都可以接受,例如“efgh”
我建议重写函数如下:

def get_input_char():
    while True:
        char = str.lower(input("Input a letter: "))
        if len(char) == 1 and char in string.ascii_letters:
            break
        else:
            print("Character '%s' not valid. Try again.\n" % char)
    return char

当问题看起来像是家庭作业时,有一件事是太有帮助了。我会犹豫在这样的答案中添加代码,你基本上是在为他们做家庭作业。嗯。。。没有意识到这是家庭作业,没有贴上这样的标签。以后我会更加小心的!它没有被贴上家庭作业的标签,但当你看到他们试图解决的问题时,它似乎有点明显。非常感谢@aquavitae,这对我的学习有很大帮助(你说的我大部分都不知道)!对不起,我问了个蹩脚的问题。这是家庭作业。但不是我的。只是为了学习。@Markranson,帮助远不止是做作业。有些概念是初学者很难发现和了解的。我所知道的编程都是我自己学的(通过书籍、视频等)。不过还不多。如果你觉得太像家庭作业,你可以给出建议而不是答案。这会有很大帮助。无论如何,谢谢你抽出时间!