本文是网易云课堂中程序设计入门-Python的课程笔记。
数据类型、运算符、变量赋值和简单I/O操作
对象与类型
五种基本对象类型
字符串,str
使用单引号、双引号、三引号括起来的一连串字符。
整数,int
支持十进制(21),八进制(025)和十六进制(0x15)
浮点数,float
1.48, 21.0, 21., .21, 2.1E-2
布尔类型,bool
True,False
对象类型
type()
$1+2
3
$’1’ + ‘2’
‘12’
$1.1 + 1.1
2.2
$1.1+1.1+1.1
3.30000000000000003(浮点数3.3无法在电脑中精确表示,有一定精度损失)
算术运算
算术运算符 | 含义 | 举例 |
---|---|---|
/ | 除法运算 | 10/2=5.0;10/3=3.333335 |
% | 求余数 | 10%3=1 |
// | 求商运算 | 10//3=3 |
** | 指数运算 | 2**3=8 |
**python2中“/“表示向下取整,因此5/9=0,需要写为5./9才对,python3则是表示正常除。
自动类型转换
参与运算的两个对象类型不同时,按照以下规则自动转换
*bool→int→float→complex
如:1.0+3=4.0;True+3.0=4.0
求余运算应用
今天是周六,10天之后是周几?
- (6+10)%7=2
x是否为偶数
- if (x % 2 == 0)
math模块
import math #引入math模块
dir(math) #列出math中的内容
help(math.sin) #帮助
- math.pi
- math.e
关系运算符
x % 2 == 0 #等于
x % 2 != 0
逻辑运算符
关系运算符 | 含义 | 举例 |
---|---|---|
and | 与 | True and False == False |
or | 或 | True or False == True |
not | 非 | not True == False |
港台女明星
性别 == 女 and (籍贯 == 香港 or 籍贯 == 台湾)
判断闰年
年份能被4整除不能被100整除,或者能被400整除,则是闰年
(y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)
运算符优先级
变量与I/O
变量,Variable
增量赋值运算符
累加
123count = count + 1# 简写为:count += 1| 增量赋值 | 等价表示 |
| ——- | :———- |
| x += 2 | x = x + 2 |
| x -= 2 | x = x - 2 |
| x = 2 | x = x 2 |
| x /= 2 | x = x / 2 |
| x %= 2 | x = x % 2 |
| x = 2 | x = x 2 |
输入与输出
input函数
|
|
print函数
输出到多行
|
|
课程练习
- 输入2 2 3时的结果为:
256
解释: 是幂运算,优先级是右结合,即多次幂运算先递归计算右边的结果:
a b c = a ( b ** c) - 输入 123 and 456 的结果为:
456
解释:逻辑运算是左结合的运算符;and 找假,找不到假返回最后一个真,or 找真,找到真的立刻给出真
因此, 123 or 456 结果为123 - 7.0 % 5 的结果为:
2.0
解释:%为求余运算 - 使用 format 函数设置保留两位小数:
num = 1 / 30
‘{0:.2f}’.format(num)
‘0.33’
‘%.2f’ % (num)
‘0.33’
format(num, ‘.2f’)
‘0.33’程序控制结构
选择结构
程序流程图
if语句
|
|
|
|
|
|
|
|
一元二次方程求解
|
|
篮球比赛领先多少才安全
|
|
循环结构
while循环语句
- 多次求一元二次方程
分析策略:
- 循环体外设定循环可执行的初始条件
- 书写需重复执行的代码(循环体)
- 设定循环条件并在循环体内设定条件改变语句
打印字符串5次
|
|
计算1+2+…+10
|
|
多次求解一元二次方程
|
|
for循环
计算1+2+3+…10
|
|
计算常数e
|
|
|
|
求常数π
|
|
|
|
奇偶归一猜想
对于每一个正整数,如果它为奇数,则对其乘3加1,如果为偶数,则对其除以2,如此循环,最后都能够得到1
|
|
九九乘法表
|
|
鸡兔同笼(穷举法)
鸡兔同笼,35头,94足
|
|
while vs. for 循环
while循环更通用
任何for循环都可以用while来实现
for循环适用于已知循环范围(range),即起始值和步长
- 其他情况均使用while循环,如:不确定循环何时终止
编程练习
二分法求平方根:
基本思想
- 猜测一个平方根(x/2)
- 如果猜小了,则正确平方根在猜测数字和原数字之间
- 如果猜大了,则在0和猜测数字之间
算法描述
- input:x
output:√x
- low = 0, high = x
- guess = (low + high) / 2
- 如果$guess^2 == x$, 则输出guess,程序结束
- $如果guess^2 < x , 则输出low = guess;继续步骤2$
- 如果$guess^2 > x$,则输出 $high = guess$;继续步骤2
1234567891011121314x = float(input('enter a number:'))low = 0high = xguess = (low + high) / 2while abs(guess ** 2 - x) > 1e-5:if guess ** 2 < x:low = guesselse:high = guessguess = (high + low) / 2print('root of x is:', guess)对于上面的程序,当x<0或x<1时将不成立
12345678910111213141516171819202122232425262728x = float(input('enter a number:'))if x < 0:print('no root')elif x < 1:low = xhigh = 1guess = (low + high) / 2while abs(guess ** 2 - x) >1e-6:if guess ** 2 > x:high = guesselse:low = guessguess = (high + low) / 2print('root of x is:', guess)else:low = 0high = xguess = (low + high) / 2while abs(guess ** 2 - x) > 1e-6:if guess ** 2 < x:low = guesselse:high = guessguess = (high + low) / 2print('root of x is:', guess)
判断素数
根据基本定义判断
|
|
上面的程序是素数时每次不被整除都会输出
12345678n = int(input('enter a int number:'))for i in range(2, n):if n % i == 0:print(n, 'not a prime')breakelse:print(n, 'is a prime')
另一种算法:
无需判断所有的range(2, x)都不能整除x,只需要判断 range(2, int(math.sqrt(x) + 1)) 即可
1. 对于任意一个合数x,假设它有两个质因子a、b(a<=b),显然x = a*b。
2. 由不等式性质可得,a <= sqrt(x), 即 a <= x^(1/2)。
3. 因此,判断一个数是不是合数,只需要判断到 int(sqrt(x))即可找到是否有质因子存在,for循环中再+1
|
|
|
|
回文数
- 求 n的逆序n‘;
- 如果n == n’,则为回文数
|
|
|
|
tips:
x = a if a > b else b