我正在创建一个元音程序,该程序检查包含所有元音的字符串。元音也应该只出现一次。 我创建的程序如下
n=input()
d=0
c=0
j=0
for i in range(0,len(n)):
if(n[i]=="a" or n[i]=="e" or n[i]=="i" or n[i]=="o" or n[i]=="u"):
c=c+1
for j in range(i+1,len(n)):
if(n[i]==n[j]):
d=d+1
if(c==5):
if(d==0):
print("The number is a vowelgram")
else:
print("The number isnt a vowelgram")
不幸的是,该程序什么都不打印。我似乎无法在代码中找到错误。感谢帮助。谢谢
答案 0 :(得分:0)
您可以使用all
来检查所有元音是否都在字符串中并且恰好是一次:
n = input('Enter string: ')
n = n.lower()
if all(x in n and n.count(x) == 1 for x in {'a', 'e', 'i', 'o', 'u'}):
print('It is a vowelgram.')
else:
print('It is not a vowelgram.')
答案 1 :(得分:0)
使用(计数器)[https://docs.python.org/3.7/library/collections.html#collections.Counter]类对字母进行计数。然后检查每个元音计数countdict['a']<=1
是否小于或等于零。
答案 2 :(得分:0)
如果没有打印任何内容,对于某些输入,您必须以内部else
的 if
分支为结尾:
if(c==5):
if(d==0):
print("The number is a vowelgram")
# c==5, but d!=0
# here , you will get no output!
else: # this else applies only to the outer if: c!=5
print("The number isnt a vowelgram")
您可以对此进行补救,例如通过使用以下涵盖所有( other )情况的构造:
if c==5 and d==0:
print("The number is a vowelgram")
else:
print("The number isnt a vowelgram")
但是,通常,嵌套循环并不是最佳的性能。您可以使用collections.Counter
来获得线性时间的结果:
from collections import Counter
c = Counter(x for x in n if x in 'aeiou')
if len(c) == 5 and all(v==1 for v in c.values()):
print('vowelgram')
else:
print('not vowelgram')