![](/img/trans.png)
[英]Is there a better way to write multiple elif statements in python?
[英]Python Efficiency - Better version than multiple if elif statements - use a for loop - chr ord conversions?
我正在介绍在线Python课程,这是问题描述。
编写一个与上述示例相反的程序:它应该以一个字符作为输入并输出相应的数字(介于1到26之间)。 您的程序应仅接受大写字母。 作为错误检查,如果输入的不是大写字母,则打印无效。
有人可以用更有效的方式撰写以下内容吗?
letter = input()
x = ord(letter)
if x >= ord('A') and x == 65:
print(1)
elif x >= ord('A') and x == 66:
print(2)
elif x >= ord('A') and x == 67:
print(3)
elif x >= ord('A') and x == 68:
print(4)
elif x >= ord('A') and x == 69:
print(5)
elif x >= ord('A') and x == 70:
print(6)
elif x >= ord('A') and x == 71:
print(7)
elif x >= ord('A') and x == 72:
print(8)
else:
print("invalid")
我在想某种for循环。 我启动了多个版本的for循环,但无法弄清楚如何处理迭代器并将其对应于递增的asci值。 谢谢! 此图表可以帮助您
您不需要任何循环即可解决此问题。 首先,意识到您在每个elif
重复了第一个测试,因此让我们将其拉到顶部:
if x < ord('A')
现在, x
的可能值范围有限。 实际上, x
的有效值还包括x < ord('A')
因此我们可以删除该测试:
if x < 65 or x > 72:
print("invalid")
好的,现在只剩下有效的结果了。 实际上,您要打印的内容有一个非常简单的公式:最终为x - 64
。 这样可以放在else
部分:
else:
print(x - 64)
所以整个事情最终是:
x = ord(letter)
if x < 65 or x > 72:
print('invalid')
else:
print(x - 64)
请注意,大写字母的跨度不止于此。 但是,修复应该非常简单。
letter = input()
x = ord(letter)
if x>64:
print x-64
else:
print "invalid"
更紧凑的机智转向运算符
x = ord(input())
print (x-64 if x>64 else 'invalid')
在不放弃全部解决方案的情况下:您可以[1]首先检查x
是否不是大写字母(签出string.uppercase
),然后再检查[2](现在您知道x
确实是大写字母),返回ord(x) - n
其中n
是大写字母开始的顺序(尝试ord('A') - 1
)。
希望有帮助!
ord(letter)-64 if 65<=ord(letter)<=90 else 'Invalid'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.