我学习Python主要是想实现两个功能:一是网络爬虫二是自动化任务实现。大数据的实现离不开python,更何况还有AI学习等等,总的来说,python的前景非常值得期待。
今天重点来学习Python 的for和While。
for 循环
使用for循环还可以对一窜字符进行单个获取:
chinese_zodiac = "鼠牛虎兔龙蛇马羊猴鸡狗猪"
for cz in chinese_zodiac:
print(cz)
配合range语法:
# range(start, stop[, step])
# start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
# stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
# step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
>>>range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3) # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
下面的程序将实现年份,后面自动带上生肖,如: 2008 年的生肖是 鼠
for year in range(2008, 2020):
print("%s 年的生肖是 %s" % (year, chinese_zodiac[(year % 12)-4]))
全部代码:
chinese_zodiac = "鼠牛虎兔龙蛇马羊猴鸡狗猪"
for cz in chinese_zodiac:
print(cz)
for i in range(1, 13):
print(i)
for year in range(2008, 2020):
print("%s 年的生肖是 %s" % (year, chinese_zodiac[(year % 12)-4]))
最终输出:
鼠
牛
虎
兔
龙
蛇
马
羊
猴
鸡
狗
猪
1
2
3
4
5
6
7
8
9
10
11
12
2008 年的生肖是 鼠
2009 年的生肖是 牛
2010 年的生肖是 虎
2011 年的生肖是 兔
2012 年的生肖是 龙
2013 年的生肖是 蛇
2014 年的生肖是 马
2015 年的生肖是 羊
2016 年的生肖是 猴
2017 年的生肖是 鸡
2018 年的生肖是 狗
2019 年的生肖是 猪
下面我们将结合for 和if ,制作一个输入出生月日就能返回星座的程序:
首先,我们列出所有星座:
zodiac_name = ('摩羯座', '水瓶座', '双鱼座', '白羊座', '金牛座', '双子座',
'巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座')
接着,我们要列出每个星座终结的月日,以便跟输入的月日做判断:
zodiac_day = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 22), (6, 22),
(7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23))
也就是说,小于1月20日的是摩羯座,小于2月19日的是水瓶座。
那么我们需要用户生日月份和日期,由用户自己来输入:
int_month = int(input('请输入生日月份:'))
int_day = int(input('请输入生日日期:'))
最后,我们利用用户输入的数字和各个星座终结的日期做比较,使用for循环和if语句配合
for i in range(len(zodiac_day)):
if zodiac_day[i] >= (int_month, int_day):
print(zodiac_name[i])
break
现在运行程序,基本没什么问题,但是细心的用户可能会发现,12月23日以后的 ,在这个循环里面并没有写出来。如果我们输入一个12月25日出生的,程序会提示:
请输入生日月份:12
请输入生日日期:25进程已结束,退出代码 0
所以我们必须使用一个elif补充说明一下:
elif int_month == 12 and int_day > 23:
print(zodiac_name[0])
break
while循环
while True:
表示一直循环运行下方的代码:
一般配合if和break跳出循环。
num = 5
while True:
print(num)
num += 1
if num > 10:
break
也可以配合continue在当前循环体上暂停一次:
num = 4
while True:
num += 1
if num == 7:
continue
if num > 10:
break
print(num)
现在我们再回到那个求星座的程序上,如果使用while语句,该如何写这段代码呢?
zodiac_name = ('摩羯座', '水瓶座', '双鱼座', '白羊座', '金牛座', '双子座',
'巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座')
zodiac_day = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 22), (6, 22),
(7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23))
int_month = int(input('请输入生日月份:'))
int_day = int(input('请输入生日日期:'))
前面的保持一样。
我们知道while条件为真时,while就继续运行,直到条件为否。
那么我们就让它继续运行:while zodiac_day[n] < (int_month, int_day):
日期顺序就是从小排到大,循环就是拿它来进行比较,直到输入日期大于某个日期,循环终结打印星座名称即可:
n = 0
while zodiac_day[n] < (int_month, int_day):
if int_month == 12 and int_day > 23:
break
n += 1
print(zodiac_name[n])
完全代码如下:
zodiac_name = ('摩羯座', '水瓶座', '双鱼座', '白羊座', '金牛座', '双子座',
'巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座')
zodiac_day = ((1, 20), (2, 19), (3, 21), (4, 21), (5, 22), (6, 22),
(7, 23), (8, 23), (9, 23), (10, 23), (11, 23), (12, 23))
int_month = int(input('请输入生日月份:'))
int_day = int(input('请输入生日日期:'))
# for i in range(len(zodiac_day)):
# if zodiac_day[i] >= (int_month, int_day):
# print(zodiac_name[i])
# break
# elif int_month == 12 and int_day > 23:
# print(zodiac_name[0])
# break
n = 0
while zodiac_day[n] < (int_month, int_day):
if int_month == 12 and int_day > 23:
break
n += 1
print(zodiac_name[n])
谢谢大家!