闲着也是闲着: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])

谢谢大家!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容