2014-04-09 120 views
0

例如一个字符串:更换使用For循环

old_key = '' 
key = '----' 

for i in key: 
    print(i) 
    if all (i) == "-": 
    print('nochange') 
    else: 
    old_key = old_key.replace(old_key,key) 

    print(old_key) 

输出:

---- 

什么是我的方法错误?由于密钥包含所有(' - '),为什么old_key被更改? 我没有正确使用所有功能?

任何想法?

回答

0

all所操作的迭代。没有一个单一的元素。如果您执行下面这段代码段:

for i in key: 
    all(i) == '-' 

你会看到False印刷多次,这就是为什么你的执行块else

摆脱循环,并为您if块做到这一点,而不是:

if len(set(key)) == 1 and key[0] == '-': 
    print "Not changed" 

上面的代码做什么,它集转换出来的名单key的。由于Python中的集合不能有重复元素set(key)就变成了-。我们现在必须确保集合(键)中只有一个元素,并且该元素是-if len(set(key)) == 1 and key[0] == '-':负责检查。

即,:

old_key = '' 
key = '----' 
if len(set(key)) == 1 and key[0] == '-': 
    print "Not changed" 
else: 
    old_key = old_key.replace(old_key,key) 
+0

你的代码工作,但我(Python的初学者)不明白“如果”语句的逻辑。你能解释一下吗? – user3454234

+0

@ user3454234更新 – shaktimaan

0

我不能正确地使用所有的功能?

没有,all()函数将返回True如果在迭代回报True所有参数。在你的情况,当传递给所有的字符串的每个字符将会返回True(如字符串作为迭代处理):

>>> all("-") 
True 

但是,那么你将执行

>>> True == "-" 
False 

,你可以看到评估板为False,导致你进入你的else条款,与key

0

不知道关于Python自己更换old_key,但看起来这是为什么:

for i in key: 
    print(i) 

key取为与一个值的数组我可以想像,只是打印出来。代码的其余什么也不做,因为要更换'与key - 但目前还没有的情况下,'