1

コードを見てください。私はロボットカーを使用して文字を描画しています。このコードでは、bと入力しても、小さなケースaが描画されます。

import create

# Draw a:
def drawa():
 #create robot
 robot = create.Create(4)
 #switch robot to full mode
 robot.toFullMode()
 for i in range(1280):
  robot.go(20,30)
 robot.stop()
 robot.move(-40,20)

# Draw b:
def drawb():
 #create robot
 robot = create.Create(4)
 #switch robot to full mode
 robot.toFullMode()
 robot.move(-100,20)
 for i in range(1270):
  robot.go(20,-30)
 robot.stop()

# Draw c:
def drawc():
 #create robot
 robot = create.Create(4)
 #switch robot to full mode
 robot.toFullMode()
 for i in range(700):
  robot.go(20,30)
 robot.stop()

# Define Main Function
def main():
 # While loop
 while(True):
  # Prompt user to enter a letter
  letter = raw_input("Please enter the letter you want to draw: ")
  # If user enters the letter a, draw a
  if letter=="A" or "a":
   drawa()
  # If user enters the letter b, draw b
  elif letter=="B" or "b":
   drawb();
  # If user enters the letter c, draw c
  elif letter=="C" or "c":
   drawc();
  # If user enters anything other than a letter from a-z,
  # ask them to enter a valid input
  else:
   print("Please enter a letter from a-z.")

main()

助けてください。

4

6 に答える 6

8

それはあなたの状態のせいです。あなたが言う時...

if letter == "A" or "a"

...あなたは実際に言っています...

if it's true that 'letter' equals 'A', or is true that 'a'

...および"a"、は、空でない文字列として、常にtrueと評価されます。letterの右側からは何も求めていませんor。これを行う:

if letter == "A" or letter == "a"

または、Pythonを使用しているため、次のようになります。

if letter in ["A", "a"]

乾杯!

于 2010-12-05T17:20:56.553 に答える
1

if letter=="A" or "a":間違っている。使用するif letter == "A" or letter == "a":

あなたのコードはif yourcondition or True(ブールコンテキストで空でないstrngが真である)と評価されます。これは基本的にを意味しif Trueます。

同じことが他のif条件にも当てはまります。

于 2010-12-05T17:20:59.170 に答える
0

Pythonではセミコロンは必要ありません。

また、letter = letter.lower() あなたがあなたのケースを単純化できるようにそうしてくださいif letter = 'a':

これは私のために働きます-

# Define Main Function
def main():
 # While loop
 while True:
  # Prompt user to enter a letter
  letter = raw_input("Please enter the letter you want to draw: ").lower()

  # If user enters the letter a, draw a
  if letter == "a":
    print "in A: %s" % letter
  # If user enters the letter b, draw b
  elif letter == "b":
    print "in B: %s" % letter
  # If user enters the letter c, draw c
  elif letter == "c":
    print "in C: %s" % letter
  # If user enters anything other than a letter from a-z,
  # ask them to enter a valid input
  else:
    print("Please enter a letter from a-z.")

main()
于 2010-12-05T17:20:16.480 に答える
0

問題はif/elifステートメントにあります。たとえば、最初のletter=="A" or "a"論理式は演算子の優先順位((letter=="A") or ("a"))のためにこのように評価されるため、文字がaと等しくなくても常に評価されます(部分は空ではないため常にTrueです)ストリング)。これを修正する方法はいくつかあります。おそらく最も簡単なのは、このように評価されるこのパターンに従うように式を変更することです。True"A"or "a""a"letter=="A" or letter=="a"((letter=="A") or (letter=="a"))

同様の質問に対する私の[やや物議を醸す]回答if/elif/elseに示されている手法を使用して、ロジックを大幅に簡略化することができます。あなたがしていることにそれを適用すると、次のような結果になるかもしれません:

import create

# Draw a:
def drawa():
 ...

# Draw b:
def drawb():
 ...

# Draw c:
def drawc():
 ...

# etc,,,

# Define Main Function
def main():
 while True:
  # Prompt user to enter a letter
  letter = raw_input("Please enter the letter you want to draw: ")
  if len(letter) > 0: 
   letter = letter[0].lower() # convert to lowercase and remove any excess
  # If first letter of what user entered was in the proper range, draw it
  if 'a' <= letter <= 'z':
   globals()['draw'+letter]()
  else: # otherwise ask them to try again
   print("Please enter a letter from a-z.")

main()
于 2010-12-05T17:47:45.433 に答える
0
letter == "B" or "b"

あなたが思っていることをしません。文字が「B」と等しいかどうかを尋ね、そうでない場合は「b」を返します。

代わりにこれを行います:

letter.lower() == 'b'
于 2010-12-05T17:21:59.347 に答える
0
 if letter in ('A', 'a'):
  drawa()
 # If user enters the letter b, draw b
 elif letter in ('B', 'b'):
  drawb()

これはあなたがそれを書くべき方法です、理由は与えられています。リストではなくタプルであることが望ましいことに注意してください('A', 'a')

于 2010-12-05T17:22:48.117 に答える