【问题标题】:Name error in one program whereas syntax error in another一个程序中的名称错误,而另一个程序中的语法错误
【发布时间】:2020-11-05 04:46:59
【问题描述】:

所以一开始,我需要创建一个程序,让用户输入一个字符,如果是 Int,那么应该会弹出一个错误……如果是 Str,那么它应该进一步分为辅音和元音。但是,这并不能解决问题(而且它不起作用),因为用户可以输入特殊字符,这些字符只会作为辅音过滤掉

Z = (input("Enter a character: "))
if type(Z) == int:
   print(Z, "is a numeral")
else: 
   if (Z=='A' or Z=='a' or Z =='E' or Z=='e' or Z=='I'or Z=='i'
        or Z=='O' or Z=='o' or Z=='U' or Z=='u'):
      print(Z, "is a Vowel")
   else:
      print(Z, "is a Consonant")

因此,在此之后,我尝试创建一个包含所有字母的列表,然后我认为它会起作用......我错了

my=input('Enter a character:')
list=[a,A,b,B,c,C,d,D,e,E,f,F,g,G,h,H,i,I,j,J,k,K,l,L,m,M,n,N,o,O,p,P,q,Q,r,R,s,S,t,T,u,U,v,V,w,W,x,X,y,Y,z,Z]
if my in list:
   if (my=='A' or my=='a' or my=='E' or my=='e' or my=='I'or my=='i'
        or my=='O' or my=='o' or my=='U' or my=='u'):
      print(my, "is a Vowel")
   else:
      print(my, "is a Consonant")
else:
    print ('HAHAHA')

这显示了这个错误

Traceback (most recent call last):
  File "C:\Users\veert\Desktop\Python\VowelOrConsonant#1.py", line 2, in <module>
    list=[a,A,b,B,c,C,d,D,e,E,f,F,g,G,h,H,i,I,j,J,k,K,l,L,m,M,n,N,o,O,p,P,q,Q,r,R,s,S,t,T,u,U,v,V,w,W,x,X,y,Y,z,Z]
NameError: name 'a' is not defined

请帮帮我

【问题讨论】:

  • 请在“”中添加每个字符。否则,python 解释器会尝试搜索 a、A、b、B、...等变量。这就是发生 NameError 的原因

标签: python python-3.x list python-2.7


【解决方案1】:

上面的列表值应该是字符串类型。因此,您需要在“”中添加每个字符,如下所示。

my=input('Enter a character:')
list=["a","A","b","B","c","C","d","D","e","E"]
if my in list:
   if (my=='A' or my=='a' or my=='E' or my=='e' or my=='I'or my=='i'
        or my=='O' or my=='o' or my=='U' or my=='u'):
      print(my, "is a Vowel")
   else:
      print(my, "is a Consonant")
else:
    print ('HAHAHA')

当您添加 list = [a, A, b, B, .... ] 时,Python 解释器会尝试搜索变量 a、A、b、B 等的值。这里没有预先定义。所以,它返回那个 NameError。

【讨论】:

    【解决方案2】:

    可能是这样的吗?

     vowels = ['A','a','E','e','I','i','O','o','U','u'],
     consonants = ['B','b','C','c','D','d','H','h','J','j','K','k','L','l','M','m','N','n','P','p','Q','q','R','r','S','s','T','t','V','v','W','w','X','x','Y','y','Z','z']
    
    inp = input('Please enter a character > ')
    
    if inp not in vowels and inp not in consonants:
        print(f'{inp} is not in the alphabet')
    
    if inp in vowels:
        print(f'{inp} is a vowel')
    
    if inp in consonants:
        print(f'{inp} is a consonant')
    

    为了便于阅读,我已经将元音和辅音分开,试图将比较运算符缩短到几个。

    满足所有输入:

    alphaneumeric = {
        'vowel': ['A','a','E','e','I','i','O','o','U','u'],
        'consonant': ['B','b','C','c','D','d','H','h','J','j','K','k','L','l','M','m','N','n','P','p','Q','q','R','r','S','s','T','t','V','v','W','w','X','x','Y','y','Z','z'],
        'number': ['1','2','3','4','5','6','7','8','9','0'],
        'symbol': ['!','@','#','$','%','^','&','*','(',')','[',']','{','}','<','>','.',',','\'','"',':',';','-','=','/','\\','~','`']
    }
    
    inp = input('Please enter a chacter > ')
    
    for key, lst in alphaneumeric.items():
        if inp in lst:
            print(f'{inp} is a {key}')
            break # return immediately
    

    【讨论】:

    • 谢谢...我是 python 新手,所以这完全让我忘记了...非常感谢
    • 没问题 :) 我们应该通过在找到元素时立即输出来改善这一点。即使在找到元素之后,也不会遍历列表。如果你在循环过程中 print(key) ,你会看到找到了元素,但是在找到 print(f'{inp} is a {key}') 之后循环会继续。实现此目的的一种简单方法是在比较运算符之后添加“break”,它会检查“if inp in lst”。
    • 提示:import stringstr.lower
    • @tobias_k 建议先生,OP 一定要查看字符串模块。
    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 2016-10-25
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多