【问题标题】:Double Trouble (Double For Loops) [String Task] [duplicate]双麻烦(双循环)[字符串任务] [重复]
【发布时间】:2018-08-12 23:12:29
【问题描述】:

所以我有一个字符串任务,我应该从输入字符串中删除元音。

case = list(input().lower()) 
vowels = ["a","e","i","o","u","y"]

for i in case:
    for k in vowels:
        if i == k:
            ind = case.index(i)
            del case[ind]
print(case)

假设我的输入是单词

'旅游'

而不是删除元音'o''u'并打印

['t','r']

打印出来

['t','u','r']

相反。

但是,如果我通过 jupyter notebook 单独运行 for 语句,它可以给我 ['t','r'] 但它不应该运行两次。

请给点建议。

【问题讨论】:

  • 不要修改您正在迭代的列表...构造一个新列表(如果您想使用 python 更强大的构造,可以查看列表推导)。 (从什么时候开始,y 是元音 :)。

标签: python string for-loop


【解决方案1】:

问题是您正在更改外部 for 循环的列表。例如。你的话是“旅游”。在您的 for 循环中,i 设置为case 的第一个字母。这是T,没有任何反应。 i 设置为第二个字母,即元音o。你删除它,第二个字母现在是ui 设置为第三个字母 r 并且没有任何反应。你的程序结束了。

为避免此问题,请为结果使用第二个列表,并且不要更改您正在迭代的列表。

case = list(input().lower()) 
vowels = ["a","e","i","o","u"]
result = ''

for i in case:
    if i not in vowels:
        result += i
print(result)

【讨论】:

  • 好的,所以我明白为什么 'u' 没有被删除,因为它替换了 'o's' 索引位置,因此被计算机跳过了。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2016-05-07
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多