1

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

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

3 回答 3

1

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

于 2013-08-05T00:07:29.663 回答
0

No, you do not need to make multiple functions for this. In fact, I would personally just do this:

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

There really isn't a need to have a 6 line function for this job. Instead, use a ternary statement like I did to keep it concise.

Also, just wanted to mention this, there is no need to do:

str(input())

because input always returns a string in Python 3.x.

于 2013-08-02T18:32:18.110 回答
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.")
于 2013-08-02T18:08:31.130 回答