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",作为一个非空字符串,总是计算为真。您没有从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(布尔上下文中的非空字符串为真),这基本上意味着if True.

同样适用于其他 if 条件。

于 2010-12-05T17:20:59.170 回答
0

问题出在您的if/elif语句上-例如,由于运算符优先级letter=="A" or "a",第一个逻辑表达式的求值方式如此,因此即使字母不等于 an也始终求值(该部分始终为 True,因为不是空的细绳)。有许多方法可以解决这个问题 - 最简单的可能是更改表达式以遵循这种模式,这种模式是这样计算的。((letter=="A") or ("a"))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

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
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 回答