集智专栏
资源加载中,请稍后...
集智专栏

[2018.02.12直播] Python之循环

Kaiser

往期回顾:

第1集:

视频:负基础入门Python(1)

文章:[2018.02.10直播] Python之禅

第2集:

视频:负基础入门Python(2)

文章:[2018.02.12直播] Python之循环


04. 循环

  • 循环


如何判断一个数是不是质数?

  • 质数(prime): 除了1和本身,不能整除其他任何数的自然数。
程序说明
判断质数
示例代码
x = if x>1: for i in range(2, x): if x%i==0: print(x,"不是质数") print(i,"是一个质因子") break else: print(x,"是质数") else: print(x,"不是质数")
程序验证过程
True


05. 列表

  • 列表


程序说明
列表
示例代码
xs = [3, 1, 2] print("xs = ", xs) print("\nxs[2] = ", xs[2]) print("\nxs[-1] = ", xs[-1]) # Negative indices count from the end of the list; prints "2"


程序说明
列表方法
示例代码
# 列表可以含有不同类型的元素 xs[2] = 'foo' print("xs = ", xs) # 列表末尾添加元素 xs.append('bar') print("xs = ",xs) # 删除并返回列表的最后一个元素 x = xs.pop() print("x = ", x, "\nxs = ", xs)


程序说明
Enumerate
示例代码
hans = ["宋江", "卢俊义", "吴用", "公孙胜", "关胜", "林冲", "秦明"] # idx表示元素在列表中的索引 for idx, han in enumerate(hans): print('#{}:{}'.format(idx + 1, han))


Quiz 3: 春运

假设你是卖火车票的,每张25,元,市面上流通的纸币面额有三种:25, 50, 100

初识状态下,你一分钱都没有,来购票的人按顺序和所持面额组成一个列表,比如: [25, 25, 25, 25, 25, 25, 25, 50, 50, 50, 100, 100, 100, 100]

请定义函数tickets(),判断当前形势下,我们能否保持足够的找零,从而将票卖给每一个人?

程序说明
控制流+列表
示例代码
def tickets(people): bill_counts = [0,0,0] # 统计当前余额 flag = True # 循环每位购票者 for i in people: if i == 25: # 如果收到25元 bill_counts[0] += 1 elif i == 50: # 如果收到50元 if bill_counts[0] == 0: flag = False break else: bill_counts[0] -= 1 bill_counts[1] += 1 # >>>> 编程区 <<<< # >>>> 编程区 <<<< return flag
正确答案
def tickets(people): bill_counts = [0,0,0] # 统计当前余额 flag = True # 循环每位购票者 for i in people: ... else: # 如果收到100元 cond_1 = bill_counts[0] >= 3 cond_2 = bill_counts[0] >=1 and bill_counts[1] >=1 if cond_2: bill_counts[0] -= 1 bill_counts[1] -= 1 bill_counts[2] += 1 elif cond_1: bill_counts[0] -= 3 bill_counts[2] += 1 else: flag = False return flag
程序验证过程
test_cases = [[25, 25, 50], [25, 100], [25, 25, 25, 25, 25, 25, 25, 25, 25, 25], [50, 50, 50, 50, 50, 50, 50, 50, 50, 50], [25, 25, 25, 25, 50, 100, 50], [25, 25, 25, 25, 25, 25, 25, 50, 50, 50, 100, 100, 100, 100], [25, 50, 25, 100], [25, 25, 25, 25, 25, 100, 100]] test_labels = [True, False, True, False, True, False, True, False] def check_answer(): flag = True for i in range(len(test_cases)): if tickets(test_cases[i])!=test_labels[i]: print("\n测试样本: ", test_cases[i]) print("计算结果:", tickets(test_cases[i])) print("正确结果:", test_labels[i]) flag = False return flag check_answer()
提示信息
能否找零的关键不仅在于总额是否充足,还要分情况看各种面额。


06. 函数

程序说明
Function
示例代码
def sign(x): if x > 0: return 'positive' elif x < 0: return 'negative' else: return 'zero' for x in [-1, 0, 1]: print(sign(x))

您也许喜欢这些文章

集智专栏

数学不行还学AI-第4话-图解张量(内有恶猫)

发表至趣味项目
科幻作家Daniel Jeffries的《数学不好还学AI》第四篇,形象介绍了张量(Tensor)的概念,并列举了生活应用中常见的张量类型,解答了Google发布的数值计算框架"TensorFlow"名称的部分来源,在下一篇文章中,将继续讲解Tensor是如何Flow的。
集智专栏

可视化的神经网络

发表至趣味项目
经过前文的引导,我们现在已经初步理解了神经网络的工作原理,但还是缺乏直观感受。本文则将神经网络的训练和预测过程进行了可视化,让我们可以清晰地观察神经网络的内部究竟是怎样的过程。
集智专栏

[2018.03.01直播] Python之列表

发表至系列教程
2018年3月1日Bilibili直播配套专栏,总结函数的定义、参数、返回值等重要概念,深入介绍数据结构——列表,及其特点和常用技巧,以及函数与列表结合的练习。

文章评论(18)

Kaiser集智 站长 发表于 5月前回复
回复新用户546:x = 26641 if x>1: for i in range(2, x): if x%i==0: print(x,"不是质数") print(i,"是一个质因子") break else: print(x,"是质数") else: print(x,"不是质数") 请问为什么第一个else放在后面的话,会输出很多26641是质数?
因为没有break
新用户546 发表于 5月前回复
x = 26641 if x>1: for i in range(2, x): if x%i==0: print(x,"不是质数") print(i,"是一个质因子") break else: print(x,"是质数") else: print(x,"不是质数") 请问为什么第一个else放在后面的话,会输出很多26641是质数?
三水 发表于 6月前回复
回复Distinct:Quzi3部分,在100元那里,if和elif分别对应的是cond_2和cond_1,为什么把他们反过来就不能通过 例如先判断if cond_1再elif cond_2。
接着上面的说,如果先cond_1的话,到第六个人拿着100来的时候,会直接给出去3个25,也就是25的数量减去3,变成了0,这个时候就只剩下1个50了,最后一个人拿的是50的时候,找不开了,返回False。但实际上,第六个人带着100来的时候,可以给他一个50和一个25,这样还剩下两个25,最后一个人拿着50买票,还可以照给他一个25
三水 发表于 6月前回复
回复Distinct:Quzi3部分,在100元那里,if和elif分别对应的是cond_2和cond_1,为什么把他们反过来就不能通过 例如先判断if cond_1再elif cond_2。
Quiz 3:春运这一题里面,有一个情况需说明:cond_1和cond_2,应该先判断cond_2是否满足,即应先判断是否既有25又有50,然后在没有50的情况下,再去判断25的数量是不是大于3个。这样的结果是优先把50的给出去。如果相反,先cond_1后cond_2的话,会可能判断错误,比如[25,25,25,25,50,100,50]
三水 发表于 6月前回复
Quiz 3:春运这一题里面,有一个情况需说明:cond_1和cond_2,应该先判断cond_2是否满足,即应先判断是否既有25又有50,然后在没有50的情况下,再去判断25的数量是不是大于3个。这样的结果是优先把50的给出去。如果相反,先cond_1后cond_2的话,会可能判断错误,比如[25,25,25,25,50,100,50]
Kaiser集智 站长 发表于 6月前回复
回复Distinct:Quzi3部分,在100元那里,if和elif分别对应的是cond_2和cond_1,为什么把他们反过来就不能通过 例如先判断if cond_1再elif cond_2。
因为两个条件并非完全互斥
Distinct 发表于 6月前回复
Quzi3部分,在100元那里,if和elif分别对应的是cond_2和cond_1,为什么把他们反过来就不能通过 例如先判断if cond_1再elif cond_2。
Kaiser集智 站长 发表于 7月前回复
回复新用户942:嗯嗯!谢谢啦 我换了一个方式写...在pycharm里能跑
加油!其实能在本地跑就行,我们的在线工具只是个辅助
Kaiser集智 站长 发表于 7月前回复
回复娇花Suit:我刚刚复制粘贴了一份,出来结果是正确的,一个字一个字量了一下确定是我tab用惯了,为了对其空格多敲了一下的原因,
看来Python真的需要游标卡尺
娇花Suit 发表于 7月前回复
我刚刚复制粘贴了一份,出来结果是正确的,一个字一个字量了一下确定是我tab用惯了,为了对其空格多敲了一下的原因,