在不同的输入后得到无返回输入

时间:2012-03-13 02:23:15

标签: python string python-3.x

大家好,如果输入一个数字,然后输入一个char,则返回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)

2 个答案:

答案 0 :(得分:7)

如果你的函数在print语句之后一直到最后,它就不会返回任何内容。函数返回的默认值为None

答案 1 :(得分:2)

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

  • 当循环更好时,您正在使用递归来测试有效值。这主要是因为与循环相比调用函数涉及的开销很大。如果使用循环,则不需要为函数提供参数。
  • 最好先检查char is None而不是char == None。如果您正在测试的对象已被自定义为等于None,则检查相等性可能会产生意外结果。检查身份(使用is)会更加健壮。
  • 但是,没有必要检查None,因为 char 将始终是一个字符串。
  • 您的代码意味着只需要一个字符,但实际上接受 ascii_letters 中包含的任何字符串,例如“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