卡在下一个字母生成器上--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)