## 请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:
ax2 + bx + c = 0
的两个解:
import math
def quadratic(a,b,c):
delta=b*b-4*a*c
if delta<0:
y='无解'
else:
y=((-b+math.sqrt(delta))/(2*a),(-b-math.sqrt(delta))/(2*a))
return y
print(quadratic(2,3,1))# => (-0.5, -1.0)
print(quadratic(1, 3, -4)) # => (1.0, -4.0)
#1到100求和
total=0
for i in range(1,101):
total=total+i
print(total)
#输出100以内的所有质数
def judge(x):
for i in range(2,x):
if x%i==0:
return False
return True
for i in range(2,101):
if judge(i):
print (i)
## 给出一个人的身高,体重,通过BMI计算:BMI=体重除以身高的平方,来判断身体状况
height=float(input('please enter your height:'))
weight=float(input('please enter your weight:'))
BMI=float(weight/(height*height))
if BMI<18.5:
print('过轻')
elif 18.5<BMI<25:
print('正常')
elif 25<BMI<28:
print('过重')
elif 28<BMI<32:
print('肥胖')
elif BMI>32:
print('严重肥胖')
#一个简单的数据库
#一个将人名用做键的字典。每个人都用一个字典表示
#字典包含'phone'和'addr',它们分别与电话号码和地址相关联
people={
'Alice':{
'phone':'2351',
'addr':'Foo 23'
},
'Betn':{
'phone':'4569',
'addr':'Street 24'
},
'Cecil':{
'phone':'7894',
'addr':'Street 32'
}
}
#电话号码和地址的描述性标签,供打印输出时使用
labels={
'phone':'phone number',
'addr':'address'
}
name=input('Name:')
#要查找电话号码还是地址?
request=input('Phone number(p) or address(a)?')
#使用正确的键:
key=request#如果request既不是'p'也不是'a'
if request=='p':key='phone'
if request=='a':key='addr'
#仅当名字是字典里包含的键时才打印信息:
if name in people:print("{}'s {} is {}.".format(name,labels[key],people[name][key]))
#使用get提供的默认值
person=people.get(name,{})
label=labels.get(key,key)
result=person.get(key,'not available')
print("{}'s {} is {}.".format(name ,label,result))
#sorted()函数
可以对list进行排序
假设我们用一组 tuple 表示学生名字 和 成绩:
L = [ ( ‘Bob,75’ ) , ( ‘Adam’,92 ) , ( ‘Bart’,66 ) , ( ‘Lisa’,88 ) ]
请用 sorted() 对上述列表分别按名字和成绩高到低排序
def by_name(t):
return t[0].lower()
l=[('Dob',75),('Adam',92),('Bart',66),('Cisa',88)]
l1=sorted(l,key=by_name)
print(l1)
#成绩从高到低排序:
def by_score(t):
return t[1]
l=[('Dob',75),('Adam',92),('Bart',66),('Cisa',88)]
l2=sorted(l,key=by_score,reverse=True)
print(l2)
print(sorted([36,5,12,6,-23],key=abs))
filter过滤函数,找出回数
def is_palindrome(n):
s=str(n)
for i in range(len(s)):
if s[i]==s[len(s)-1-i]:
return True
else:
return False
output=filter(is_palindrome,range(1,1000))
print(list(output))
#访问限制
class Student(object):
def __init__(self,name,score):
self.__name=name
self.__score=score
def get_name(self):
return self.__name
def get_score(self):
return self.__score
def set_score(self,score):
if 0<=score<=100:
self.__score=score
else:
raise ValueError('bad score')
def get_grade(self):
if self.__score>=90:
return 'A'
elif self.__score>=60:
return 'B'
else:
return 'C'
bart=Student('Bart Simpson',59)
print('bart.get_name()=',bart.get_name())
bart.set_score(90)
print('bart.get_score()=',bart.get_score())
print('DO NOTuse bart.Student__name:',bart._Student__name)
结果为:
bart.get_name()= Bart Simpson
bart.get_score()= 90
DO NOTuse bart.Student__name: Bart Simpson
继承多态
class Animal(object):
def run(self):
print('Animal is running...')
class Dog(Animal):
def run(self):
print('Dog is running...')
class Cat(Animal):
def run(self):
print('Cat is running...')
def run_twice(animal):
animal.run()
animal.run()
a=Animal()
d=Dog()
c=Cat()
print('a is Animal?',isinstance(a,Animal))
print('a is Dog?',isinstance(a,Dog))
print('d is Cat',isinstance(d,Cat))
print('d is Dog?',isinstance(d,Dog))
print('c is Cat',isinstance(c,Cat))
run_twice(d)
#获取对象属性
class Myobject(object):
def __init__(self):
self.x=9
def power(self):
return self.x*self.x
obj=Myobject()
print('hasattr(obj,\'x\')=',hasattr(obj,'x'))#有属性'x'吗?
setattr(obj,'y',9)#设置一个属性‘y’
print('hasattr(obj,\'y\')=',hasattr(obj,'y'))#有属性'y'吗?
print('getattr(obj,\'y\')=',getattr(obj,'y'))#获取属性‘y’
print('obj.y=',obj.y)#获取属性‘y’
print('getattr(obj,\'z\')=',getattr(obj,'y',909))#获取属性'z'吗?,如果没有默认为909
f=getattr(obj,'power')#获取power属性
print(f)
print(f())
#@property
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
s = Student()
s.score = 60
print('s.score =', s.score)
s.score=999
print('score must between 0~100')
结果为:
s.score = 60
Traceback (most recent call last):
File "D:/python/13.py", line 19, in <module>
s.score=999
File "D:/python/13.py", line 12, in score
raise ValueError('score must between 0 ~ 100!')
ValueError: score must between 0 ~ 100!
#使用__slots__
class Student(object):
__slots__=('name','age')
class GraduateStudent(Student):
pass
s=Student()
s.name='ssd'
s.age=29
try:
s.score=90
except AttributeError as e:
print('AttributeError:',e)
g=GraduateStudent()
g.score=90
print('g.score=',g.score)
结果为:
AttributeError: 'Student' object has no attribute 'score'
g.score= 90
#使用@property
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
s = Student()
s.score = 60
print('s.score =', s.score)
# ValueError: score must between 0 ~ 100!
s.score = 9999
结果为:
s.score = 60
Traceback (most recent call last):
File "D:/python/13.py", line 19, in <module>
s.score = 9999
File "D:/python/13.py", line 12, in score
raise ValueError('score must between 0 ~ 100!')
ValueError: score must between 0 ~ 100!
使用枚举类
from enum import Enum,unique
@unique
class Weekday(Enum):
Sun=0
Mon=1
Tue=2
Wed=3
Thu=4
Fru=5
Sat=6
day1=Weekday.Mon
print('day1=',day1)
print('Weekday.Tue=',Weekday.Tue)
print('Weekday[\'Tue\']=',Weekday['Tue'])
print('Weekday.Tue.value=',Weekday.Tue.value)
print('day1==Weekday.Mon ?',day1==Weekday.Mon)
print('day1==Weekday.Tue ?',day1==Weekday.Tue)
print('day1==Weekday(1) ?',day1==Weekday(1))
for name,member in Weekday.__members__.items():
print(name,'=>',member)
Month=Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
for name,member in Month.__members__.items():
print(name,'=>',member,',',member.value)
结果为:
day1= Weekday.Mon
Weekday.Tue= Weekday.Tue
Weekday['Tue']= Weekday.Tue
Weekday.Tue.value= 2
day1==Weekday.Mon ? True
day1==Weekday.Tue ? False
day1==Weekday(1) ? True
Sun => Weekday.Sun
Mon => Weekday.Mon
Tue => Weekday.Tue
Wed => Weekday.Wed
Thu => Weekday.Thu
Fru => Weekday.Fru
Sat => Weekday.Sat
Jan => Month.Jan , 1
Feb => Month.Feb , 2
Mar => Month.Mar , 3
Apr => Month.Apr , 4
May => Month.May , 5
Jun => Month.Jun , 6
Jul => Month.Jul , 7
Aug => Month.Aug , 8
Sep => Month.Sep , 9
Oct => Month.Oct , 10
Nov => Month.Nov , 11
Dec => Month.Dec , 12
datetime
>>> from datetime import datetime,timedelta,timezone
>>> now=datetime.now()#获取当前datetime
>>> print('now=',now)
now= 2019-04-13 12:13:36.100478
>>> print('type(now)=',type(now))
type(now)= <class 'datetime.datetime'>
>>> dt=datetime(2019,4,13,12,20)#用指定时间日期创建datetime
>>> print('dt=',dt)
dt= 2019-04-13 12:20:00
>>> print('datetime->timestamp:',dt.timestamp())#把datetime转换为timestamp
datetime->timestamp: 1555129200.0
>>> t=dt.timestamp()#把timestamp转换为datetime
>>> print('timestamp->datetime:',datetime.fromtimestamp(t))
timestamp->datetime: 2019-04-13 12:20:00
>>> print('timestamp->datetime as UTC+0:',datetime.utcfromtimestamp(t))
timestamp->datetime as UTC+0: 2019-04-13 04:20:00
>>> cday=datetime.strptime('2019-6-2 18:59:39','%Y-%m-%d %H:%M:%S')#从str读取datetime
>>> print('strptime:',cday)
strptime: 2019-06-02 18:59:39
>>> print('strftime:',cday.strftime('%a,%b %d %H:%M'))#把datetime格式化输出
strftime: Sun,Jun 02 18:59
>>> print('current datetime=',cday)
current datetime= 2019-06-02 18:59:39
>>> print('current+10 huors=',cday+timedelta(hours=10))#对日期进行加减
current+10 huors= 2019-06-03 04:59:39
>>> print('current-1day=',cday-timedelta(days=1))
current-1day= 2019-06-01 18:59:39
>>> print('current+2.5days=',cday+timedelta(days=2.5))
current+2.5days= 2019-06-05 06:59:39
>>> utc_dt=datetime.utcnow().replace(tzinfo=timezone.utc)#把时间从utc+0时区转换为utc+8
>>> utc8_dt=utc_dt.astimezone(timezone(timedelta(hours=8)))
>>> print('UTC+0:00 now=',utc_dt)
UTC+0:00 now= 2019-04-13 11:05:09.697464+00:00
>>> print('UTC9_dt now=',utc8_dt)
UTC9_dt now= 2019-04-13 19:05:09.697464+08:00
统计字母出现的次数
from collections import Counter
c=Counter()
for ch in 'programming':
c[ch]=c[ch]+1
print(c)
结果为:
Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})