我正在尝试编写一个程序,要求用户输入字符串而不使用全局变量。如果字符串只有并排的括号,那么它是偶数。如果它有字母,数字或括号间隔,那么它是不均匀的。例如,()和()()是偶数,而(()和(pie)不是。下面是我到目前为止所写的内容。我是否必须为这个问题创建多个函数?
def recursion():
string = str(input("Enter your string: "))
if string == "(" or ")":
print("The string is even.")
else:
print("The string is not even.")
答案 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中返回一个字符串。