闲着也是闲着:Python for 循环和while循环

我学习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])

谢谢大家!

你可能感兴趣的:(闲着也是闲着:Python for 循环和while循环)