2

我正在介绍在线 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 值。谢谢!这个 chr ord 图可以提供帮助

4

4 回答 4

4

你不需要任何循环来解决这个问题。首先,意识到你在 each 中重复了第一个测试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)

请注意,大写字母的范围不止于此。但是,修复应该相当简单。

于 2013-09-09T05:55:15.023 回答
1
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')
于 2013-09-09T08:48:30.020 回答
0

在不提供完整解决方案的情况下:您可以 [1] 首先检查是否x不是大写字母(签出string.uppercase),然后 [2](现在您知道x确实是大写字母),返回ord(x) - nwheren是大写字母开始(尝试ord('A') - 1)。

希望有帮助!

于 2013-09-09T05:57:25.100 回答
0
ord(letter)-64 if 65<=ord(letter)<=90 else 'Invalid'
于 2013-09-09T05:58:55.270 回答