目录
上机练习:基本数据类型
(一)数值基本运算
- 基本数值运算:+, -, *, /, //, %, **
- 进制间转换:hex( ) 十六进制, oct( ) 八进制, bin( )二进制
33 + 7 # 加
40
33 - 7 # 减
26
33 * 7 # 乘
231
33 // 7 # 整除
4
33 / 7 # 除
4.714285714285714
33 % 7 # 余数
5
divmod (33,7) # 整除除法和余数
(4, 5)
33 ** 7 # 乘方
42618442977
hex (33) # 转十六进制
'0x21'
oct (33) # 转八进制
'0o41'
bin (7) #转二进制
'0b111'
(二)类型转换
1,0,‘abc’,None,1.2,False,‘ ’
str(), bool(), int(), float(), is None, ==, !=
str (0)
'0'
str ('abc')
'abc'
str (None)
'None'
str (1.2)
'1.2'
str (False)
'False'
str (' ')
' '
str ('')
''
bool (1)
True
bool (0)
False
bool ('abc')
True
bool (None)
False
bool (1.2)
True
bool (False)
False
bool (' ') # 引号中间有空格
True
bool ('') # 引号中间没有空格
False
注意:布尔型中‘’和‘空格‘不一样
int (0)
0
int (1.2)
1
int (False)
0
1 is None
False
'abc' is None
False
'' is None
False
False is None
False
None is None
True
0 == None
False
1 != None # 不等于
True
(三)字符串基本操作
+, *, len( ), [ ], in,ord( ), chr( ),含有中文的字符串
注意:字符串一定要加引号!
'hello' + 'world'
'helloworld'
'hello' * 5
'hellohellohellohellohello'
len ('hello')
5
'hello world' [3:8:3]
'lw'
'hello world' [:10:4]
'hor'
'hello world' [4::2]
'owrd'
'hello word' [-1::2]
'd'
'hello world' [-1:-10:-2]
'drwol'
'oo' in 'hello world'
False
'he' in 'hello world'
True
('hello world' [4::2]) * 3
'owrdowrdowrd'
ord ('A')
65
ord ('a')
97
ord ('1')
49
chr (66)
'B'
chr (23)
'\x17' # 十六进制的表示法
chr (98)
'b'
(四)字符串高级操作
s=‘abcdefg12345’
切片:获得defg12,获得fg12345,获得54321,
获得aceg2
s='abcdefg12345'
s [3:8:]
'defg1'
s [3:9:] # 左开右闭 右边要往后一位才能包括
'defg12'
s [5::]
'fg12345'
s [-1:-8:]
''
s [-1:-8:-1]
'54321gf'
s [-1:-6:-1] # 反向索引
'54321'
s [:9:2]
'aceg2'
t=‘Mike and Tom’
split拆分
upper/lower/swapcase修改大小写
ljust/center/rjust排版30位宽度左中右对齐
replace将Mike替换为Jerry
t='Mike and Tom'
t.split (' ')
['Mike', 'and', 'Tom']
# 引号内要空格
t.split ('')
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
t.split ('')
ValueError: empty separator
t.upper()
'MIKE AND TOM'
t.lower()
'mike and tom'
t.swapcase()
'mIKE AND tOM'
t.ljust(30, '*') #在30个字符中左对齐
'Mike and Tom******************'
t.rjust(30,'*')
'******************Mike and Tom'
t.center(20)
' Mike and Tom '
t.replace ('Mike','Jerry')
'Jerry and Tom'
课后作业:基本数据类型
1. 字符串循环左移
给定一个字符串S,要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部,得到新字符串“cdefab”,称作字符串循环左移k位。
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。
可以使用以下语句实现字符串s的输入:
s=str(input())
可以使用以下语句实现非负整数n的输入:
n=int(input())
输入格式:
输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
输出格式:
在一行中输出循环左移N次后的字符串。
输入样例:
abcd
2
输出样例:
cdab
slice切片 + 加法合并
s=str('abcdef') # 具体例子
n=int(2)
k=s[:2]
kk=s[n:]
out=str(kk+k)
print(out)
cdefab
s=str(input()) # 囊括写法
n=int(input())
k=s[:n]
kk=s[n:]
out=str(kk+k)
print(out)
s=str(input()) # 简洁的写法(记住)
n=int(input())
out=str(s[:n]+s[n:])
2. 斜边上的高
输入直角三角形两直角边a,b的值,输出斜边上的高
可以使用以下语句实现非负整数a的输入:
a=int(input())
可以使用 round(x,2) 函数四舍五入保留2位小数
输入格式:
2行,每行一个整数,分别为a,b的值
输出格式:
一个数,即斜边上的高,保留2位小数
输入样例:
4
5
输出样例:
3.12
a=int(4) # 具体例子
b=int(5)
c=(a*a+b*b)**0.5
h=a*b/c
hh=round(h,2)
print(hh)
3.12
a=int(input()) # 囊括写法
b=int(input())
c=(a*a+b*b)**0.5
h=a*b/c
hh=round(h,2)
print(hh)
a=int(input()) # 简洁一点
b=int(input())
c=(a*a+b*b)**0.5
h=a*b/c
print(round(h,2))
3. 最后一个单词
计算字符串最后一个单词的长度,单词以空格隔开。
可以使用以下语句实现字符串s的输入:
s=str(input())
输入格式:
一行字符串,非空,长度小于5000。
输出格式:
整数N,最后一个单词的长度。
输入样例:
hello world
输出样例:
5
s=str('hello world') # 具体例子
t=s.split(" ")
tt=t[-1]
sum=len(tt)
print(sum)
5
s=str(input()) # 囊括写法
t=s.split(" ")
tt=t[-1]
sum=len(tt)
print(sum)
s=input() #简洁一点
b=s.split() #必须生成b 否则s未变化
print(len(b[-1]))
4. 计算字符个数
接受一个由字母和数字组成的字符串,和一个字符,然后输出输入的字符串中含有该字符的个数。不区分大小写。
可以使用以下语句实现字符串s的输入:
s=str(input())
输入格式:
输入一个由字母和数字组成的字符串,和一个字符,以空格隔开。
输出格式:
输出输入的字符串中含有该字符的个数。
输入样例:
a1234bcdef a (这是两个单词啊)
输出样例:
1
s=str(input())
t=s.split(" ")
last=str(t[-1])
first=str(t[0])
cot=first.count(last)
print(cot)
s=input()
b=s.split()
print(b[0].count(b[-1])) # b[0]中有几个b[-1]
5. A+B问题
给出两个整数,输出他们的和
可以使用以下语句实现整数n的输入:
n=int(input())
输入格式:
两行,每行一个整数
输出格式:
输出一个数,即他们的和
输入样例:
1
2
输出样例:
3
a=int(input())
b=int(input())
print(a+b)
6. 圆的周长与面积
给出一个圆的半径,求出圆的周长和面积
可以使用以下语句实现非负整数n的输入:
n=int(input())
使用 round(a,4) 函数保留4位小数,规定pi=3.14159
输入格式:
输入包含一个整数r,表示圆的半径
输出格式:
输出一行,包含2个数,分别是圆的周长、面积,用空格分隔开,数字保留小数点后4位
输入样例:
3
输出样例:
18.8495 28.2743
r=int(input())
pi=3.14159
c=2*pi*r
s=pi*r*r
cc=round(c,4)
ss=round(s,4)
print(cc,ss)
r=int(input()) # 简洁一点
pi=3.14159
c=2*pi*r
s=pi*r*r
print(round(c,4),round(s,4))
7. 三角形面积
由三角形的三边长,求其面积。
规定:输入的三条边一定能构成三角形,不用进行判定。
提示:a,b,c小于1000由三角形的三边a,b,c求面积可以用如下的公式:
其中p=(a+b+c)/2
面积=S=√[p(p-a)(p-b)(p-c)]
请使用
print(’%.2f’%s)
来保留小数。
可以使用以下语句实现非负整数n的输入:
n=int(input())
输入格式:
三行,每行一个整数。
输出格式:
一个实数,保留两位小数。
输入样例:
3
4
5
输出样例:
6.00
a=int(input())
b=int(input())
c=int(input())
p=(a+b+c)/2
s=(p*(p-a)*(p-b)*(p-c))**0.5
print('%.2f'%s)
8. 等差数列末项计算
给出一个等差数列的前两项a1,a2,求第n项是多少
可以使用以下语句实现非负整数n的输入:
n=int(input())
输入格式:
三行,包含三个整数a1,a2,n
输出格式:
一个整数,即第n项的值
输入样例:
1
4
100
输出样例:
298
思路:等差数列,先求差m是多少,第n项的值:a1 + m*(n-1)
a1 = int(input())
a2 = int(input())
m = a2 - a1
n = int(input())
N = a1 + m*(n-1)
print(N)
上机练习:容器类型操作
(一)列表、元组操作
基本操作: + , * ,len() , [ ] ,in
mylist = [1,2,3,4,5]
mylist2 = ['a','b','c','d','e']
mylist + mylist2
[1, 2, 3, 4, 5, 'a', 'b', 'c', 'd', 'e']
mylist * 3
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
len(mylist)
5
len(mylist*3)
15
mylist[:4:2]
[1, 3]
3 in mylist
True
(二)列表、元组高级操作
高级操作:切片,拆分 split() ,合成 join()
# 切片:获得[2,3,4],获得[3,4,5],获得[3,2,1],获得[1,3,5]
# 列表切片
mylist = [1,2,3,4,5]
mylist[1:4]
[2, 3, 4]
mylist[2::]
[3, 4, 5]
mylist[-3::-1]
[3, 2, 1]
mylist[::2]
[1, 3, 5]
# 元组切片
>>> mytpl = (1,2,3,4,5)
>>> mytpl[1:4]
(2, 3, 4)
>>> mytpl[2:5]
(3, 4, 5)
>>> mytpl[-3::-1]
(3, 2, 1)
>>> mytpl[0:5:2]
(1, 3, 5)
t = 'mike and tom'
# 拆分
t.split(' ')
['mike', 'and', 'tom']
# 合并
'_'.join(['mike','and','tom'])
'mike_and_tom'
'/'.join(['mike','and','tom'])
'mike/and/tom'
(三)集合基本操作
a=set([1,2,3,4,5])
b=set([2,4,6,8,10])
并、交、差、异或、子集
添加、删除、是否空集
a=set([1,2,3,4,5])
b=set([2,4,6,8,10])
a|b
{1, 2, 3, 4, 5, 6, 8, 10}
a&b
{2, 4}
a-b
{1, 3, 5}
a^b
{1, 3, 5, 6, 8, 10}
a.add(7)
a
{1, 2, 3, 4, 5, 7}
c=a.pop() # 删除最后一个元素是针对列表 用到set里面就成随机了!
c
1
a
{2, 3, 4, 5, 7}
(四)字典基本操作
mydict={1:‘Mon’, ‘line1’:3332}
添加、删除、是否空字典
取字典所有的key/value
判断key是否存在
>>> mydict = {1:'Mon', 'line1':3332}
>>> mydict.update({2:'FLC'})
>>> mydict
{1: 'Mon', 'line1': 3332, 2: 'FLC'}
>>> 3 in mydict
False
课后作业:容器类型操作
1. 合并两个列表并去重
输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10;
合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。
可以使用以下实现列表alist的输入:
alist=list(map(int,input().split()))
同时为保证输出结果一致,请将集合内元素排序之后再输出。
如对于列表alist,可输出sorted(alist)。
输入格式:
共两行,每一行都用来输入列表中的元素值,以空格隔开。
输出格式:
共一行,以列表形式打印输出。
输入样例:
1 2 3
4 3 2
输出样例:
[1,2,3,4]
alist=list(map(int,input().split())) # 分成几个字符串、转换成整数、list变成列表
blist=list(map(int,input().split()))
clist=list(set(alist+blist)) # 合并、去重、变成集合set去重
print(sorted(clist)) # 排序、变成你列表输出(集合不能排序)
2. 对列表元素进行分类后加标签存入字典
输入一个列表,要求列表中的每个元素都为正整数且列表包含的元素个数为偶数;将列表中前一半元素保存至字典的第一个键值1中,后一半元素保存至第二个键值2中。
可以使用以下实现列表alist的输入:
alist=list(map(int,input().split()))
输入格式:
共一行,列表中的元素值,以空格隔开。
输出格式:
共一行,以字典的形式打印结果。
输入样例:
1 2 3 4
输出样例:
{‘1’: [1,2], ‘2’: [3,4]}
alist=list(map(int,input().split()))
n=len(alist)//2
dic={'1':alist[:n],'2':alist[n:]}
print(dic)
3. 列表反转
输入一个列表,将其反转后输出新的列表。
可以使用以下实现列表alist的输入:
alist=list(map(int,input().split()))
输入格式:
共一行,列表中的元素值,以空格隔开。
输出格式:
共一行,为一个列表。
输入样例:
1 2 3
输出样例:
[3, 2, 1]
alist=list(map(int,input().split()))
alist.reverse() # 用reverse
print(alist)
alist=list(map(int,input().split()))
print(alist[::-1]) # 反转,step为-1
4. 列表元素绝对值排序
输入一个列表,要求列表中的每个元素都为整数;将列表中的所有元素按照它们的绝对值大小进行排序,绝对值相同的还保持原来的相对位置,打印排序后的列表(绝对值大小仅作为排序依据,打印出的列表中元素仍为原列表中的元素)。
可以使用以下实现列表alist的输入:
alist=list(map(int,input().split()))
输入格式:
共一行,列表中的元素值,以空格隔开。
输出格式:
共一行,为一个列表。
输入样例:
-2 1 3
输出样例:
[1, -2, 3]
alist=list(map(int,input().split()))
print(sorted(alist, key=abs)) # 绝对值