麻省理工公开课《计算机科学及编程导论》中文笔记(第3讲)

麻省理工公开课《计算机科学及编程导论》中文笔记(第3讲)作者:@易枭寒

第三讲: Common code patterns_ iterative programs



回顾:
已经讲了
一、数据
数据类型:数字、字符串、布尔型


二、运算:加,减,乘,除,取模等,布尔型运算(and, or, not )


三、语句(命令):
1、赋值语句:如何将变量名与数据值绑定。例如,mystring = 'hello'
2、输入和输出语句。例如,用作输出的print,和用作输入的 raw_input。
3、条件语句(分支语句):用来控制我们所建立的一系列指令的流程
4、循环语句:例如,while


良好的编程风格:
1、写注释
2、类型规定:使用运算符时记得检验运算对象的类型,以保证程序得到想要的结果
3、变量名的命名规则:小写,下划线
4、检验代码中的所有分支:对于条件语句,始终记得检验分支所有可能情况,保证结果是我们要的


解决循环问题的步骤:
首先,选一个变量用作计数。需要确定每次执行循环时,必须存在某个变化的变量,用来对循环过程进行计数。
其次,赋初值。赋初值必须在循环外发生,必须在循环体的外面。
再次,需要设定合适的循环终止判别。让程序知道循环该何时结束,显然,该判别必须包含计数变量否则没有意义,必须包含计数变量。因为计数变量就是用来描述循环的。
最后,编写代码块。


强调,循环内必须包含变量值的改变,如果计数变量都不变的话,结果就会得到无限循环。循环完做什么。


流程图(长方形表示开始,赋值。菱形判断,箭头Yes OR No。平行四边形,打印结果)
再画一个求奇数偶数的流程图


# 求完全平方数的平方根
x = 16
ans = 0
while ans*ans <= x:  #改成只有小于号
    ans = ans + 1
print ans






#打印奇数,偶数
if (x/2)*2 == x:
    print '偶Even'
else :
    print '奇odd'




#注意观察终止判别和计数变量的变化
x = 1515361
ans = 0
if x >= 0:
    while ans*ans < x:
        ans = ans +1
        print 'ans = ',ans
    if ans*ans != x:
        print x,' 不是完全平方数'
    else: print ans
else: print x,' 是负数'
防御式编程:保证遍历了代码中的所有分支,保证对每个分支,
打印或返回的结果有意义。保证所有可能的输入数据都能对应一个分支。
并且不会产生错误或无限循环。




穷举:
穷举表示逐个判别计算中某元素、某参数所有可能值,
检验一切可能,直到找到正确答案。
即:尝试所有合理的值,直到找到答案


#求某整数的约数
#--coding:utf-8--
x = 10
i = 1
while i<x:
    if x%i == 0:
        print '约数',i
    i= i+1






for循环(for loop):
#--coding:utf-8--
x = 10
for i in range(1,x):
    if x%i == 0:
        print '约数',i




x = 1515361
if x>= 0:
    for ans in range(1,x):
        if ans*ans == x:
            print ans
            break




元组:
(有序元素。不可变的。小括号。索引下标从0开始。负数索引表示从右边开始。切片操作)
>>> test = (1, 2, 3, 4)
>>> test
(1, 2, 3, 4)
>>> test[0]
1
>>> test[-1]
4
>>> test[0:3]
(1, 2, 3)
>>> 






x = 100
divisors = ( ) #约数。空元组
for i in range(1, x):
    if x%i == 0:
        divisors = divisors + (i, ) #单个元组需要加逗号,此处操作符重载了哦。


字符串:
字符的序列。可以用元组相同的操作。索引、切片等。
>>> str = "abcdefg"
>>> str2= "hijklmn"
>>> str + str2
'abcdefghijklmn'
>>> str[0]
'a'
>>> str[2:4]
'cd'
>>> str[:5]
'abcde'
>>> str[-1]
'g'
>>> 






sumDigits = 0
for c in str(1952): #str()将数字转换为字符串
    sumDigits += int(c)
print sumDigits












s1 = 'abcdefg'
s2 = 'hijklmn'
print s1 + s2


print s1
print s1[0]
print s1[3]
print s1[-1]


print s1[2:4]
print s1[:3]
print s1[3:]








print s1.find('cde')


print s1 == s1
print s1 == s2
print s1 < s2
print s1 > s2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值