2015-10-05 71 views
0
vows = "aeiouy" 
myInput = raw_input("Insert a phrase containing vowels that you want to nullify: ") 
lowerCased = myInput.lower() 
for vow in vows: 
    if vow in lowerCased: 
      print lowerCased.replace(vow, "0") 

我试图写一个程序(无功能)之前积累,打印h0ll0当我输入hello但我得到的是h0llo其次是hell0。我们还没有得到功能,所以我试图写这个代码而不使用它们,但我不知道如何在打印h0ll0之前进行累积。有人能解释我做错了什么吗?的Python:如何打印

+1

呦你用这个元音代替每个元音都要打印一次。打印前应先更换所有的元音。 – SamYonnou

+0

在阅读其他答案后,我意识到我可以通过在循环外部使用打印来实现这一点。 –

回答

1

my_string.replace("a", "b")返回那里ab替换字符串。因此,您可以存储该值并每次更换,并在所有替换后进行打印。

lowerCased = myInput.lower() 
for vow in vows: 
#The 'if' is not necessary 
    lowerCased = lowerCased.replace(vow, "0") 
print lowerCased 
+0

有趣的是,如何重复使用变量lowerCased而不是创建新变量,甚至更好奇它是如何打印局部变量而不是全局变量的,而这种变量是lowerCased,情况总是如此?我的意思是,python总是忽略变量的范围,而是使用上述变量中​​的最后一个存储值?谢谢 –

1

为什么你越来越h0llohell0是因为你检查vows每一个元音,而每次更换

这次打印出来的字符串原因是发生了什么事:

for vow in vows: # checks each vowel 
    if vow in lowerCased: 
      print lowerCased.replace(vow, "0") 

开始循环

False

e in 'hello'?Truereplace e in hello; becomes h0llo

Falsei in 'hello'?

o in 'hello'?Truereplace o in hello; becomes hell0

Falseu in 'hello'?

结束for循环。

此外,if vow in lowerCased是没有必要的。你可以重写你的代码是这样的:

vows = "aeiouy" 
myInput = raw_input("Insert a phrase containing vowels that you want to nullify: ") 
lowerCased = myInput.lower() 
for vow in vows: 
    lowerCased = lowerCased.replace(vow, '0') # overwrites lowerCased with the updated replacement 
print(lowerCased) 
+0

这不是一个完整的答案。如果解释发生了什么(种),但没有给出任何见解,以帮助修复 –

+0

@SterlingArcher我仍然在编辑它...... – freddiev4

+0

好吧,不要粗鲁,但这就是发生在FGITW答案。下次只需花时间全部写出来。如果upvotes依赖于帖子的速度,这不是一个质量问题10.9.9次。 –

0

你必须使用print()外循环,已经全部换成了voyels后。

由于replace()返回一个字符串,只需更新您的lowerCased变量中的结果。

vows = "aeiouy" 
myInput = raw_input("Insert a phrase containing vowels that you want to nullify: ") 
lowerCased = myInput.lower() 
for vow in vows: 
    if vow in lowerCased: 
      lowerCased = lowerCased.replace(vow, "0") 
print(lowerCased) 
+0

我试着检查如果我在for循环中使用print,会发生什么情况,而且它很丑,非常感谢你,这非常有帮助。 –

0

不断更新循环中的字符串,并把你的打印语句外循环:

vows = "aeiouy" 
myInput = raw_input("Insert a phrase containing vowels that you want to nullify: ") 
lowerCased = myInput.lower() 
for vow in vows: 
    if vow in lowerCased: 
      lowerCased = lowerCased.replace(vow, "0") 
print(lowerCased) 

或者,你可以使用这个是写循环的一个紧凑的方式:

lowerCased = ''.join('0' if i.lower() in vows else i for i in myInput) 
print(lowerCased) 
+0

我知道.join,但教授告诉我们使用.replace,我们也经历了.upper .lower等等。 –

1

可以只使用一个正则表达式:

>>> import re 
>>> s='HellO' 
>>> re.sub(r'[aeiou]', '0', s.lower()) 
'h0ll0' 
+0

教授只解释了导入(今天),但从我所知道的情况来看,这看起来非常有用,速度也更快。我会记下这个!谢谢! –