2

私は現在、タートルを使って文字を描くプログラムを書いています。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

4 に答える 4

4

条件を変更します:

x == 97 or 65:

x == 97 or x == 65:
于 2013-11-04T03:13:35.200 に答える
0

これ:

if x == 97 or 65:

あなたが思っていることをしません。それは次のようになります:

if (x == 97) or 65:

これは明らかにあなたが望んでいたものではありません。

これを次のように変更します。

if x == 97 or x == 65:

または、in代わりに演算子を使用します。

if x in (97, 65):

そして、別の条件でも同じこと!

これで問題が解決するはずです。

于 2013-11-04T03:18:13.677 に答える
0
x = letter.lower()

if x == 'a':
    a()
    print(x)
elif x == 'b':
    b()
    print(x)
elif x == 'c':
    c()
    print(x)
于 2013-11-04T03:18:55.513 に答える
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]()

同じ関数を実行しているので、文字を 2 回チェックする必要はありません。小文字または大文字のコードをマップするだけです (私の例では、小文字のコードをマップしました)。

この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
于 2013-11-04T04:31:16.940 に答える