Python控制语句

通过终端的标准输入来控制小车的电机转向

我们在上一章节介绍了如何使用raw_input()这个内置函数来读取终端的输入,这里我们就通过它获取我们输入的指令,然后控制小车。在这里我们将学习一个新的知识就是判断语句。

判断语句其实很简单,就是给个条件然后判断它是否成立,如果成立就是真值也就是True,反之就是假值也为False。看下下面简单的例子:

a=int(raw_input('please input a number: '))
if a==4:                #如果变量a==4是真的,a==4为True,就
    print "it is four"  #打印“it is four”。
else:                   #否则,即a==4是假的,a==4为False,就
    print "it is not four" #打印“it is not four”。

这就是最简单的判断语句,不过这个只有一个条件,如果需要判断的情况有很多种怎么办?当然有解决办法,参考下面的例子:

a=int(raw_input('please input a number: '))
if a==4:                #如果变量a==4是真的,a==4为True,就
    print "it is four"  #打印“it is four”。
elif a==5:
    print "it is five" #打印“it is five”
else:                   #否则,即a==4是假的,a==4为False,就
    print "it is not four and five" #打印“it is not four and five”。

在上面这个例子中,我们可以把if理解为如果怎么怎么了,那么就执行什么什么;elif理解为否则如果怎么怎么了,那么就执行什么什么;else理解为否则怎么怎么了,那么就执行什么什么。

这样我们学会了判断语句,我们就结合上面的控制小车的代码,来通过终端控制小车:

#coding=utf8
import RPi.GPIO as GPIO
import time

IN1 = 11
IN2 = 12
IN3 = 16
IN4 = 18

#激活GPIO函数
def init():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(IN1, GPIO.OUT)
    GPIO.setup(IN2, GPIO.OUT)
    GPIO.setup(IN3, GPIO.OUT)
    GPIO.setup(IN4, GPIO.OUT)

#前进函数
def forward():
    GPIO.output(IN1,GPIO.HIGH)
    GPIO.output(IN2,GPIO.LOW)
    GPIO.output(IN3,GPIO.HIGH)
    GPIO.output(IN4,GPIO.LOW)

#后退函数
def reverse():
    GPIO.output(IN1,GPIO.LOW)
    GPIO.output(IN2,GPIO.HIGH)
    GPIO.output(IN3,GPIO.LOW)
    GPIO.output(IN4,GPIO.HIGH)

#左转
def left():
    GPIO.output(IN1,GPIO.LOW)
    GPIO.output(IN2,GPIO.HIGH)
    GPIO.output(IN3,GPIO.HIGH)
    GPIO.output(IN4,GPIO.LOW)

#右转
def right():
    GPIO.output(IN1,GPIO.HIGH)
    GPIO.output(IN2,GPIO.LOW)
    GPIO.output(IN3,GPIO.LOW)
    GPIO.output(IN4,GPIO.HIGH)

#停止小车
def stop_car():
    GPIO.output(IN1,False)
    GPIO.output(IN2,False)
    GPIO.output(IN3,False)
    GPIO.output(IN4,False)

command = raw_input('please input your command:')

#激活GPIO接口
init()

if command == 'w':
    forward()
elif command == 's':
    reverse()
elif command == 'a':
    left()
elif command == 'd':
    right()
else:
    stop_car()
GPIO.cleanup()

while语句学习并且改进程序

在这一课我们要先学习一个新的控制语句,它叫while控制语句。它和上一个if一样也是通过一个条件判断返回值的真假,来控制程序是否进入到那一步骤。不过与if不同的是while是循环控制语句,下面我们先来看个简单的例子:

while True:
    print "I'm is While"

当我们执行这个程序时,会发现程序一直打印I'm is While并且不会停止。这就是一个简单的死循环也是无限循环,除非我们手动把程序杀死,要不然它会一直执行下去。想杀此程序很简单,只要关闭弹出的终端窗口就可以。

  • 造成上面死循环的原因是什么?

很简单,就是我们给的条件是True

  • 那么那些部分是我们给出的条件?

while:之间的部分就是我们给出的条件(记得while后面有个空格)。

下面我们来改进下这个程序,让条件判断的结果根据变量的变化而改变:

a=1
while a<=10:
    a=a+1
    print a

这个程序执行的结果就是连续打印数字1、2、3...10,它并没有像上面那个程序一样无限循环的执行下去,这就是因为当a=11时,a<=10这个条件判断是False值,也就是布尔值的假值了。此时不满足while循环继续执行的条件,它就不会再执行下面的a=a+1print a这两行代码。

学习了while控制语句,那么我们可以将它用到我们的小车程序中,将它放在raw_input()函数之前,一直读取用户的输入,让它无限循环下去。

#coding=utf8
import RPi.GPIO as GPIO
import time

IN1 = 11
IN2 = 12
IN3 = 16
IN4 = 18

#激活GPIO函数
def init():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(IN1, GPIO.OUT)
    GPIO.setup(IN2, GPIO.OUT)
    GPIO.setup(IN3, GPIO.OUT)
    GPIO.setup(IN4, GPIO.OUT)

#前进函数
def forward():
    GPIO.output(IN1,GPIO.HIGH)
    GPIO.output(IN2,GPIO.LOW)
    GPIO.output(IN3,GPIO.HIGH)
    GPIO.output(IN4,GPIO.LOW)

#后退函数
def reverse():
    GPIO.output(IN1,GPIO.LOW)
    GPIO.output(IN2,GPIO.HIGH)
    GPIO.output(IN3,GPIO.LOW)
    GPIO.output(IN4,GPIO.HIGH)

#左转
def left():
    GPIO.output(IN1,GPIO.LOW)
    GPIO.output(IN2,GPIO.HIGH)
    GPIO.output(IN3,GPIO.HIGH)
    GPIO.output(IN4,GPIO.LOW)

#右转
def right():
    GPIO.output(IN1,GPIO.HIGH)
    GPIO.output(IN2,GPIO.LOW)
    GPIO.output(IN3,GPIO.LOW)
    GPIO.output(IN4,GPIO.HIGH)

#停止小车
def stop_car():
    GPIO.output(IN1,False)
    GPIO.output(IN2,False)
    GPIO.output(IN3,False)
    GPIO.output(IN4,False)


#激活GPIO接口
init()
#开始执行while死循环,记得要缩进。
while True:
    command = raw_input('please input your command:')
    if command == 'w':
        forward()
    elif command == 's':
        reverse()
    elif command == 'a':
        left()
    elif command == 'd':
        right()
    else:
        stop_car()
GPIO.cleanup()