甚至做圆括号?

时间:2013-08-02 17:25:12

标签: python string recursion python-3.x parentheses

我正在尝试编写一个程序,要求用户输入字符串而不使用全局变量。如果字符串只有并排的括号,那么它是偶数。如果它有字母,数字或括号间隔,那么它是不均匀的。例如,()和()()是偶数,而(()和(pie)不是。下面是我到目前为止所写的内容。我是否必须为这个问题创建多个函数?

def recursion():
    string = str(input("Enter your string: "))
    if string == "(" or ")":
        print("The string is even.")
    else:
        print("The string is not even.")

3 个答案:

答案 0 :(得分:1)

一个非常有用的stdlib脚本shlex自动提供这种类型的解析,并允许您自定义行为。

答案 1 :(得分:0)

我会将评论中的大部分信息收集到答案中。

首先,在您发布的代码中

if string == "(" or ")":

将始终评估为True,因为非空字符串始终为True。你所写的内容相当于:

if ( string == "(" ) or ")":

因此相当于

if ( string == "(" ) or True:

总是 True

接下来,由于您似乎只是想检查您的字符串是否只包含'()'集合,因此您可以使用Jon Clements对not string.replace('()','')的建议:

if not string.replace('()', ''):

让我们来看看它的作用:

>>> not '()'.replace('()', '')
True
>>> not '()()'.replace('()', '')
True
>>> not '(()'.replace('()', '')
False
>>> not '(pie)'.replace('()', '')
False

最后,您不应该调用变量字符串,因为它会影响标准库中的模块。像user_given_string这样的东西可能有效。

总结一下:

def recursion():
    user_given_string = input("Enter your string: ")
    if not user_given_string.replace('()', ''):
        print("The string is even.")
    else:
        print("The string is not even.")

答案 2 :(得分:0)

不,您不需要为此创建多个功能。事实上,我个人会这样做:

def recursion():
    print("The string is not even." if input("Enter your string: ").replace('()','') else "The string is even.")

这项工作实际上不需要6行功能。相反,像我一样使用ternary statement来保持简洁。

另外,只是想提一下,没有必要这样做:

str(input())

因为input总是在Python 3.x中返回一个字符串。