Python 3.2.5循环问题

时间:2013-11-04 03:12:22

标签: python loops python-3.x

我目前正在编写一个使用乌龟来绘制字母的程序。我知道的 turtle.write函数,但我希望有乌龟绘制字符。无论如何,当我向用户询问输入信时,我希望我的代码检查它是什么字母,然后执行一个函数 根据输入的字母。到目前为止,这是我的代码:

#this section asks for a letter to type

while 1:
    letter = input("Letter: ")
    x = ord(letter)
    print(x,letter)

#the code will call a certain function for each letter typed

if x == 97 or 65:
    a()
    print("a")
if x == 98 or 66:
    b()
    print("b")
elif x == 99 or 67:
    c()

(其中a()b()c()是之前定义的函数,用于绘制该字母)

问题出在我发表if语句时。输出仅为a()。我输入的字母无关紧要,它总是给我a()。怎样才能让我的代码识别出其他字母输入并执行该功能呢?感谢任何帮助,谢谢!

4 个答案:

答案 0 :(得分:4)

更改条件:

x == 97 or 65:

x == 97 or x == 65:

答案 1 :(得分:0)

此:

if x == 97 or 65:

不按照您的想法行事。它等于:

if (x == 97) or 65:

这显然不是你想要的。

将其更改为:

if x == 97 or x == 65:

或者改为使用in运算符:

if x in (97, 65):

与另一个条件相同的事情!

这应该解决它,希望它有所帮助!

答案 2 :(得分:0)

x = letter.lower()

if x == 'a':
    a()
    print(x)
elif x == 'b':
    b()
    print(x)
elif x == 'c':
    c()
    print(x)

答案 3 :(得分:0)

我知道这不能回答你的问题(其他人有),但是在Python中你想根据条件调用函数;另一种模式是使用字典。

由于函数与任何其他名称一样,它们可以在字典中指定为值,以下是代码如何显示的示例:

func_map = {97: a, 98: b, 99: c}
letter_code = ord(lower(letter))
if letter_code in func_map:
    func_map[letter_code]()

由于您正在运行相同的功能,因此无需检查该字母两次;你可以只映射小写或大写代码(在我的例子中,我已经映射了小写代码)。

if条件检查字典func_map中是否存在密钥。默认情况下,当您遍历字典时,它们会返回其键:

>>> d = {'a': 1, 'b': 2}
>>> for i in d:
...     print(i)
...
a
b

所以我们检查的是代码是否存在于字典中,然后我们得到该代码的值;这是函数对象,然后用()调用它。这可能看起来很奇怪,但由于函数与Python中的任何其他名称一样,您可以将它们重新分配给其他名称:

>>> def a():
...   print('I am A')
...
>>> b = a
>>> b()
I am A