请查看代码。我正在用一辆机器人汽车画一个字母,在这段代码中,当我输入b时,它仍会画一个小盒子。
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()
请帮忙。
答案 0 :(得分: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"]
干杯!
答案 1 :(得分:1)
if letter=="A" or "a":
不正确。使用if letter == "A" or letter == "a":
您的代码求值为if yourcondition or True
(布尔上下文中的非空strng为true),这基本上意味着if True
。
同样适用于其他条件。
答案 2 :(得分: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()
答案 3 :(得分:0)
letter == "B" or "b"
不符合您的想法。它询问字母是否等于“B”,如果不是,则返回'b'。
请改为:
letter.lower() == 'b'
答案 4 :(得分:0)
if letter in ('A', 'a'):
drawa()
# If user enters the letter b, draw b
elif letter in ('B', 'b'):
drawb()
这是你应该如何写它,原因已经给出。请注意,它最好是元组('A', 'a')
而不是列表。
答案 5 :(得分:0)
问题在于您的if/elif
语句 - 例如,由于operator precedence,第一个letter=="A" or "a"
逻辑表达式的评估方式与此((letter=="A") or ("a"))
一样,因此将始终评估为{ {1}}即使该字母不等于True
("A"
部分始终为True ,因为or "a"
不是空字符串) 。有很多方法可以解决这个问题 - 最简单的方法可能只是将表达式更改为遵循此模式"a"
,这个模式的评估方式与letter=="A" or letter=="a"
类似。
您可以使用我[有点争议] answer中显示的技术大大简化((letter=="A") or (letter=="a"))
逻辑到类似的问题。将它应用于您正在执行的操作可能会产生以下内容:
if/elif/else