2015-10-08 36 views
2

我想检查这个“a”和“b”是否在userInput中。 例如:用户要输入“hello”,它会说它不是ab字。 例如:如果用户输入“bag”,它会说它是一个ab字。 例如:如果用户输入“年龄”,则会说它不是ab字(因为缺少b)。检查递归中的2个字符

我已经尝试了很多方法,包括使用计数器来计算字符串在字符串内有多少次。 如果“a”和“b”位于字符串内部,它将打印“内部”,否则如果其中一个不在里面或两个都不在里面,它会打印“不在里面”

请帮助我出。我试过了,但似乎无法正常工作。

def tryword(x):   
    if x == '': 
     return 0 
    lastNum= x[-1] 
    if (lastNum == "a" and "b"): 
     return tryword(x[:-1]) + 1 
    else: 
     return tryword(x[:-1]) + 0 

if recursiveWord >= 0: 
    print "inside" 
else: 
    print" not inside" 

print tryword("abcdef") 
+0

是否需要使用递归?我无法真正看到这样做的直接好处。 –

+0

你好,是的,需要使用递归 – stack

回答

2

您需要添加两个累加器参数来跟踪您是否找到每个字符。每个布尔值为一个布尔值。

def trywordp(x, foundA, foundB): 
    if foundA and foundB: return True # Positive base case: Both found! 
    if x == "": return False # Negative base case: String exhausted 
    if x[0] == 'a': return trywordp(x[1:], True, foundB) # First character in string is 'a', continue checking next character 
    if x[0] == 'b': return trywordp(x[1:], foundA, True) # Ditto for 'b' 
    return trywordp(x[1:], foundA, foundB) # Neither 'a' nor 'b', continue looking 

def tryword(x): 
    return trywordp(x, False, False) # We have not found any of them yet so start with foundA and foundB as False 

if tryword("stringwithaandb"): 
    print "inside" 
else: 
    print "not inside" 
+0

如果tryword(“贝拉”): 打印“内部” 其他: 打印“不是内部” 如果它是独立的,它会打印它不是内部。但是,它应该在里面。因为“a”和“b”都在字符串 – stack

+0

之内,所以我忘记了最后一次递归调用。现在修复功能! –

+0

重新在线?可以帮助我通过讨论聊天来检查一些东西吗? – stack

0

检查你的病情

if (lastNum == "a" and "b"): 

您大概意思是这样

if (lastNum == "a" or lastNum == "b"): 

但这不会工作。你可以使用魔术数字。

def tryword(x):   
    if x == '': 
     return 0 
    lastNum= x[-1] 
    if (lastNum == "a"): 
     return tryword(x[:-1]) | 1 
    if (lastNum == "b"): 
     return tryword(x[:-1]) | 2 
    return tryword(x[:-1]) 

assert tryword("qwer") == 0 
assert tryword("a") == 1 
assert tryword("b") == 2 
assert tryword("bb") == 2 
assert tryword("ab") == 3 
assert tryword("abababab") == 3 

def check_inside(s): 
     if tryword(s) == 3: 
      print "inside" 
     else: 
      print "not inside" 
+0

这是行不通的,因为2'a'也会匹配。所以你还需要解决其他错误。 –

+0

我想在我的输出达到什么样的基本.. 输入:“贝拉” 输出:内部 输入:“袋” 输出:内部 输入:“无” 输出“没有内部” – stack

+0

只返回串?或者术语“输入+输出”意味着什么? – AlexN