繁体   English   中英

Python效率-比多个if语句更好的版本-使用for循环-chr ord转换?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM