我找到了一个实现switch语句的函数 - >
File = open('/file.txt','r')
String = File.readline()
String = str(String)
print String
for case in switch(String):
if case("Head"):
print "test successed"
break
if case("Small"):
print String
break
if case("Big"):
print String
break
if case():
print String
break
我打印时的字符串值是Head,但是switch语句总是转到最后一种情况..函数显然工作正常,因为当我用v =“Head”更改字符串时它工作了!!!
任何想法出了什么问题?
切换功能 - >
class switch(object):
def __init__(self, value):
self.value = value
self.fall = False
def __iter__(self):
"""Return the match method once, then stop"""
yield self.match
raise StopIteration
def match(self, *args):
"""Indicate whether or not to enter a case suite"""
if self.fall or not args:
return True
elif self.value in args: # changed for v1.5, see below
self.fall = True
return True
else:
return False
答案 0 :(得分:5)
请不要写这样的代码。以适当的Python风格做到这一点。它的很多更容易阅读。任何人都会使用#34;切换"一团糟可能会痛苦地诅咒你。
with open('/file.txt', 'r') as fp:
line = fp.readline().rstrip('\n')
print line
if line == 'Head':
print "test successed"
elif line == 'Small':
print line
elif line == 'Big':
print line
else:
print line
至于它失败的原因,readline()
调用很可能包含一个尾随的换行符,'Head' != 'Head\n'
。
答案 1 :(得分:0)
.readline()
返回整行,包括换行符。
您需要.strip()
字符串,或与'Head\n'
等进行比较。
另外,关于样式,大写变量名称在python中并不是真的。
答案 2 :(得分:0)
编辑:我知道这不是Pythonic,但这是一个有趣的练习。
这是在OP加入实施之前 - 这是我的看法。 它
raise
会出现有意义的错误 - 或者如果设置了allow_fallthrough
,则可以使用for:else:
处理默认案例"switch"
套件
def switch(arg, allow_fallthrough = False):
fail = False
def switcher(*args):
return (arg in args)
def default_switcher(*args):
return (not args)
def fallthrough(*args):
if not allow_fallthrough:
raise ValueError("switch(%r) fell through" % arg)
yield switcher
yield default_switcher
yield fallthrough
def test():
String = "Smallish"
for case in switch(String):
if case():
print "default", String
break
if case("Head"):
print "Head GET"
break
if case("Small", "Smallish"):
print "Small:", String
break
if case("Big"):
print "Big:", String
break
else: # Only ever reached with `allow_fallthrough`
print "No case matched"