2013-02-17 47 views
2

目前,我正在上一些计算机科学课。我已经发布了编写一个程序的任务,一旦有效的输入,将打印字母表中的下一个字母。这里是我的代码:卡在下一个字母生成器 - Python 3

char = input() 
ordchar = ord(char) 
nextletter = ordchar + 1 
nextletter = chr(nextletter) 

if nextletter == ("["): 
    print("A") 

if nextletter == ("{"): 
    print("a") 

if nextletter!=("[","{"): 
    print(nextletter) 

现在,我确实看到了问题的代码,虽然我不知道如何纠正它。基本上,在第二行到最后一行代码中,我希望它基本上说“如果nextletter不等于{或[print nextletter]”。

回答

3

使用not in成员运算:

if nextletter not in ("[","{"): 
    print(nextletter) 

还要注意的是,你能避免第三次测试,如果你使用if-elif结构,而不是单个if's。这样,你可以把第三部分放在else块中。

+0

哇,这很快。谢谢,你是一个真正的帮助。 – user2080719 2013-02-17 15:54:19

+0

@ user2080719 ..不客气:) – 2013-02-17 15:54:58

5
if nextletter not in ["[", "{"]: 
    print(nextletter) 
+0

downvoter:请解释我的答案与其他答案是错误的/不同的吗?什么? – 2013-02-17 15:53:48

+0

感谢您的帮助。 – user2080719 2013-02-17 15:54:40

+0

@ cIph3r:不,Ingbar使用*列表*,而不是列表理解。这里使用元组和列表没有多大区别。 – 2013-02-17 15:55:32

5

你并不需要测试在所有这些字符。在您确保nextletter永远将是要么[{,如果你只是分配一个不同的字母来nextletter那里之前它的代码:

if nextletter == "[": 
    nextletter = "A" 
elif nextletter == "{": 
    nextletter = 'a' 

如果您仍然需要做这样的测试,使用not in operator

if nextletter not in '[{': 

not in返回True如果左边的操作数不存在右侧的顺序排列。我用两个字符的字符串在我的例子,这算作一个序列:

>>> '[' in '[{' 
True 
>>> '0' in '[{': 
False 
0

而其他的答案是正确的,做你想要什么的正确方法是使用elifelse

if nextletter == ("[") : 
    print("A") 
elif nextletter == ("{") : 
    print("a") 
else : 
    print(nextletter) 
+0

为什么这是正确的方式? – cIph3r 2013-02-17 15:57:49

+2

我在字面上远离早期版本的程序中的两个字符,但我忘了使用elif。不能怪我,我只用了5天的Python。 – user2080719 2013-02-17 15:59:51

+0

@ cIph3r因为你没有进行冗余检查:如果你到达'else',那么'nextletter'不能是'['或'{'。 – Jaime 2013-02-17 16:01:34

0

问题是你在问下一个字母是不是等于("[","{")的元组。你想问问它是不是等于“[”或“{”。因此,您必须询问, if nextletter != "[" and nextletter != "{" 这将检查它是否既不是“[”也不是“{”。希望这可以帮助

+0

这可以缩短任何一个答案[Martijn](http://stackoverflow.com/a/14922929/1561176),[Rohit](http://stackoverflow.com/a/ 14922919/1561176)或[我自己](http://stackoverflow.com/a/14922921/1561176) – 2013-02-17 15:58:40