卡在下一个字母生成器上--Python 3

卡在下一个字母生成器上--Python 3,python,if-statement,python-3.x,chr,ord,Python,If Statement,Python 3.x,Chr,Ord,目前,我正在网上学习一些计算机科学课程。我的任务是编写一个程序,根据有效输入,将打印字母表中的下一个字母。这是我的密码: char = input() ordchar = ord(char) nextletter = ordchar + 1 nextletter = chr(nextletter) if nextletter == ("["): print("A") if nextletter == ("{"): print("a") if nextletter!=("["

目前,我正在网上学习一些计算机科学课程。我的任务是编写一个程序,根据有效输入,将打印字母表中的下一个字母。这是我的密码:

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”。

使用
不在
成员资格运算符中:

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

另外请注意,如果使用
if elif
构造而不是单个
if
,则可以避免第三个测试。这样,您可以将第三个部分放入
else
块中。

您根本不需要测试这些字符。在前面的代码中,确保永远不会出现
nextletter
无论是
[
还是
{
,如果您只是将不同的字母分配给
nextletter
,则:

if nextletter not in ["[", "{"]:
    print(nextletter)
if nextletter == "[":
    nextletter = "A"
elif nextletter == "{":
    nextletter = 'a'
如果仍需要进行此类测试,请使用:

not in
如果左侧操作数不在右侧的序列中,则返回
True
。在我的示例中,我使用了一个包含两个字符的字符串,该字符串作为序列计算:

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

虽然其他答案是正确的,但正确的做法是使用
elif
else

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

问题是,您正在询问Nextleter是否不等于
(“[”,“{”)
的元组。您想询问它是否不等于“[”或“{”)。因此,您必须询问,
如果nextletter!=“[”和nextletter!=“{”

这将检查它是否既不是“[”也不是“{”。希望这能有所帮助。

downvoter:请解释我的答案有何错误/与其他答案不同?什么?@cIph3r:不,Ingbar使用的是列表,而不是列表理解。在这里使用元组和列表没有太大区别。@cIph3r您是对的,生成器在存储结果时比列表理解更快tter,但在这种情况下,你只是完全困惑了,看看其他的回答。这很好,尽管我认为@MartijnPieters使用
不在
中的字符串来回答这个问题是一种更具python风格的方式——它也更具可读性,因为只有2个字符的标点符号而不是7个。哇,这很快。谢谢,你是一个好朋友真正的帮助。这可以缩短为任何一个答案,或者在早期版本的程序中,我与答案相差两个字符,但我忘了使用elif。不能怪我,我只使用Python 5天。@cIph3r,因为你没有做冗余检查:如果你达到
else
那么
nextletter
不能是
[
{
。好的,但是运行时的速度将接近于无法测量的速度。而且代码更长,看起来更复杂,使代码可读性更低;)@cIph3r它不更长,与OP的代码行数完全相同。它最大的优点不是执行速度,而是最大限度地减少了出错和可维护性的机会:如果明天决定检查
而不是
[
,你只需要编辑一行,而不是两行。如果你发现使用
否则如果
语句有损可读性,那么你需要阅读更多的代码。@cIph3r投票最多的答案仍然需要分别处理
[
{
案例,这意味着还有四行。
if nextletter == ("[") :
    print("A")
elif nextletter == ("{") :
    print("a")
else :
    print(nextletter)