Ec25自己写函数作为脚本,文档注释...1
Ec31if&raw_input()1
ec33while.1
ec35用函数写的一个小的选择游戏...1
ec39列表的操作...1
ec40字典...1
map函数应用...1
ec41函数写小型地图游戏,raw_input提示给答案...1
ec随机数用法...1
getattr用法...1
Ec42class写ec41的游戏...1
ec处理异常try&except1
From实验楼...1
Pathbao.py.1
sy1glob.1
Sy2os包...1
shutil包...1
Pickle包...1
subprocess包...1
thread包...1
multiprocessing包...1
读取中文...1
Sy6.py线程实验售票系统...1
sy6.py用类实现...1
ascii.pyargparse操作分解...1
sy8.pyargparse操作最终...1
pic_change_str.py实验楼图片转字符画课程...1
2048系列代码...1
主程序代码...1
2048cpzip/for的用法...1
2048cp1curse的颜色设置。。...1
2048cp2研究curses的一些用法,很奇怪,还不精...1
2048cp3#边框的画法,控制数组大小和里面值是否出现...1
2048cp4学习defaultdict的用法...1
2048read_input.py.1
2048hasatta的用法...1
2048format的用法...1
2048clear1
Jianming.1
Cat1
class_inherit1
class_init1
finally.1
gui1
gui2.1
inherit1
Lambda.1
list_comprehension.1
method.1
my_module.1
my_module1.1
Pickling.1
powersum..1
print_one_line.1
threading.1
threading2.1
try_except1
菜鸟教程...1
Using_copy.1
using_dict1
using_file.1
using_list1
using_name.1
Using_slice.1
using_str1
using_tuple.1
菜鸟教程例子...1
sl1.1
sl2.1
sl3.1
sl4.1
sl5.1
Sl6.1
sl7.1
sl11.1
sl12.1
sl13.1
sl14.1
sl17.1
sl18.1
sl19.1
sl20.1
sl21.1
Sl22.1
sl23.1
Sl24.1
Sl25.1
Sl26.1
Sl27.1
sl28.1
Sl29.1
Sl30.1
Mysql教程...1
1.创建数据库...1
2.删除数据库...1
3.创建表...1
4.删除表...1
5修改表...1
(1)修改表类型,语法如下:...1
(2)增加表字段,语法如下:...1
(3)删除表字段,语法如下:...1
(4)字段改名,语法如下:...1
(5)修改字段排列顺序...1
(6)表改名,语法如下:...1
DML语句...1
插入记录...1
更新记录...1
删除记录...1
查询记录...1
(1)查询不重复的记录。...1
(2)条件查询...1
(3)排序和限制...1
(4)聚合...1
Ashdgasbjdb
Asdhgajsd
x='thereare%dtypesofpeople'%10
binary='binary'
do_not="don't"
y='thosewhoknow%sandthosewho%s.'%(binary,do_not)
print(x)
print(y)
print('Isaied:%r.'%x)
print("Ialsosaid:'%s'."%y)
hilarious=False
joke_evaluation="Isn'tthatjokesofunny!%r"
print(joke_evaluation%hilarious)
w="thisistheleftsideof.."
e='astringwitharightside.'
print(w+e)
print('Maryhadalittlelamb.')
print("itsfleecewaswhiteas%s."%'snow')
print("AndeverywherethatMarywent.")
print("."*10)#whatthefk这边是出现10次
end1="C"
end2='h'
end3='e'
end4='e'
end5='s'
end6='e'
end7='B'
end8='u'
end9='r'
end10='g'
end11='e'
end12='r'
print(end1+end2+end3+end4+end5+end6,)
print(end7+end8+end9+end10+end11+end12)
formatter='%r%r%r%r'
print(formatter%(1,2,3,4))
print(formatter%('one','two','three','four'))
print(formatter%(True,False,False,True))
print(formatter%(formatter,formatter,formatter,formatter))
print(formatter%(
"Ihadthisthing.",
'Thatyoucouldtypeupright.',
"Butitdidn'tsing.",
"SoIsaidgoodnight."
))
days="\nMonTueWedThuFriSatSun"
months="\nJan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug"
print("Herearethedays:",days)
print("\n\nHerearethemonths:",months)
#print('whatfc')#这样写就不会换行,很正常的写法
print('''
whatfc
''')#这样写就会换行,应该是'''起作用
#--coding:utf-8--
tabby_cat="\tI'mtabbedin."
persian_cat="I'msplit\nonaline."
backslash_cat="I'm\\a\\cat."
fat_cat="""
I'lldoalist:
\t*Catfood
\t*Fishes
\t*Catnip\n\t*Grass
"""
print(tabby_cat)
print(persian_cat)
print(backslash_cat)
print(fat_cat)
'''
所有的转义字符和所对应的意义:
转义字符
意义
ASCII码值(十进制)
\a
响铃(BEL)
007
\b
退格(BS),将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF),将当前位置移到下一行开头
010
\r
回车(CR),将当前位置移到本行开头
013
\t
水平制表(HT)(跳到下一个TAB位置)
009
\v
垂直制表(VT)
011
\\
代表一个反斜线字符''\'
092
\'
代表一个单引号(撇号)字符
039
\"
代表一个双引号字符
034
\
代表一个问号
063
\0
空字符(NULL)
000
\ooo
1到3位八进制数所代表的任意字符
三位八进制
\xhh
1到2位十六进制所代表的任意字符
二位十六进制
注意:区分,斜杠:"/"与反斜杠:"\",此处不可互换
print"Howoldareyou",
age=raw_input()
print"Howtallareyou",
height=raw_input()
print"Howmuchdoyouweigh",
weight=raw_input()
print"So,you're%rold,%rtalland%rheavy."%(age,height,weight)
1>>>raw_input_A=raw_input("raw_input:")
2raw_input:abc
3>>>input_A=input("Input:")
4Input:abc
5
6Traceback(mostrecentcalllast):
7File"
8input_A=input("Input:")
9File"
10NameError:name'abc'isnotdefined
11>>>input_A=input("Input:")
12Input:"abc"
13>>>
复制代码
1>>>raw_input_B=raw_input("raw_input:")
2raw_input:123
3>>>type(raw_input_B)
4
5>>>input_B=input("input:")
6input:123
7>>>type(input_B)
8
9>>>
例子1可以看到:这两个函数均能接收字符串,但raw_input()直接读取控制台的输入(任何类型的输入它都可以接收)。而对于input(),它希望能够读取一个合法的python表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个SyntaxError。
例子2可以看到:raw_input()将所有输入作为字符串看待,返回字符串类型。而input()在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型(int,float);同时在例子1知道,input()可接受合法的python表达式,举例:input(1+3)会返回int型的4。
就是说input处理数字的时候会确定类型,而raw_input全都是字符型,无所谓。
age=raw_input("Howoldareyou")
height=raw_input("Howtallareyou")
weight=raw_input("Howmuchdoyouweigh")
fromsysimportargv
script,first,second,third=argv
print"Thescriptiscalled:",script
print"Yourfirstvariableis:",first
print"Yoursecondvariableis:",second
print"Yourthirdvariableis:",third
script,user_name=argv
prompt=''
print"Hi%s,I'mthe%sscript."%(user_name,script)
print"I'dliketoaskyouafewquestions."
print"Doyoulikeme%r"%user_name
likes=raw_input(prompt)
print"Wheredoyoulive%s"%user_name
lives=raw_input(prompt)
print"Whatkindofcomputerdoyouhave"
computer=raw_input(prompt)
print"""
Alright,soyousaid%raboutlikeingme.
Youlivein%r.Notsurewherethatis.
Andyouhavea%rcomputer.Nice.
"""%(likes,lives,computer)
#搞清楚了%r和%s的区别,r是后面引用字符串的时候会接引号,而s不会接引号
#coding=utf-8#添加这个可以使用中文注释
script,filename=argv#"获取文件名"
print("Here'syourfile%r:")%filename
printtxt.read()
print(txt.closed)
txt.close()
#print"Typethefilenameagain:"
#file_again=raw_input(">>>>")
#txt_again=open(file_again)
#printtxt_again.read()
#coding=utf-8
script,filename=argv
print"We'regoingtoerase%r."%filename
print"Ifyoudon'twantthat,hitCTRL-C(^C)."
print"Ifyoudowantthat,hitRETURN."
raw_input("")
print"Openingthefile..."
target=open(filename,'w')
print"Truncatingthefile.Goodbye!"
target.truncate()
print"NowI'mgoingtoaskyouforthreelines."
line1=raw_input("line1:")
line2=raw_input("line2:")
line3=raw_input("line3:")
print"I'mgoingtowritethesetothefile."
#target.write(line1&"\n"&line2&"\n"&line3)#这种连接的用法找找看
target.write("%s\n%s\n%s"%(line1,line2,line3))#此刻我想说还是我大结构化靠谱!
print"Andfinally,wecloseit."
target.close()
fromos.pathimportexists
script,from_file,to_file=argv
print"Copyingfrom%sto%s"%(from_file,to_file)
#wecoulddothesetwoononelinetoo,how
input=open(from_file)
indata=input.read()
print'''Theinputfileis%dbyteslong,
Doestheoutputfileexist%r,
Ready,hitRETURNtocontinue,CTRL-Ctoabort.
'''%(len(indata),exists(to_file))#用了'''分行显示,格式化不晓得能不能分行。
raw_input()
output=open(to_file,'w')
output.write(indata)
print"Alright,alldone."
output.close()
input.close()
#Thisoneislikeyourscriptswithargv
defprint_two(*args):
arg1,arg2,arg3=args
print"arg1:%r,arg2:%r,arg3;%s"%(arg1,arg2,arg3)
#ok\,that*argsisactuallypointless,wecanjustdothis
defprint_two_again(arg1,arg2):
print"arg1:%r.arg2:%r"%(arg1,arg2)
#注意区分上下两个的用法
#thisjusttakeonearguement
defprint_one(arg1):
print"arg1:%r"%arg1
#thisonetakesnoarguement
defprintnone():
print"Igotnothin'."
print_two("Zed","Shaw",'wtf')
print_two_again("Zed","Shaw")
print_one("First!")
printnone()
defcheese_and_crackers(cheese_count,boxes_of_crackers):
print"Youhave%dcheeses!"%cheese_count
print"Youhave%dboxesofcrackers!"%boxes_of_crackers
print"Manthat'senoughforaparty!"
print"Getablanket.\n"
print"Wecanjustgivethefunctionnumbersdirectly:"
cheese_and_crackers(20,30)
print"Or,wecanusevariablesfromourscripts:"
amount_of_cheese=10
amount_of_crackers=50
cheese_and_crackers(amount_of_cheese,amount_of_crackers)
print"Wecanevendomathinsidetoo:"
cheese_and_crackers(10+20,5+6)
print"Andwecancombinethetwo,variablesandmath:"
cheese_and_crackers(amount_of_cheese+100,amount_of_crackers+1000)
script,input_file=argv
defprint_all(f):
printf.read()
defrewind(f):
f.seek(0)
defprint_a_line(line_count,f):
printline_count,f.readline()#这个是如何实现每一行都读取,是个问题
current_file=open(input_file)
print"Firstlet'sprintthewholefile:\n"
print_all(current_file)
print"\nNowlet'srewind,kindoflikeatape."
rewind(current_file)
print"Let'sprintthreelines:"
current_line=1
print_a_line(current_line,current_file)
current_line=10
#current_line=current_line+1
#print_a_line(current_line,current_file)
print_a_line(3,current_file)
print_a_line(3,current_file)#果然不是按照行号来的
defadd(a,b):
print"Adding%d+%d"%(a,b)
returna+b
defsubtract(a,b):
print"Suntracting%d-%d"%(a,b)
returna-b
defmultiply(a,b):
print"Multiplying%d*%d"%(a,b)
returna*b
defdivide(a,b):
print"Dividing%d/%d"%(a,b)
returna/b
print"let'sdosomemathwithjustfunctions!"
age=add(30,5)
height=subtract(78,4)
weight=multiply(90,2)
iq=divide(100,2)
print"Age:%d,Height:%d,Weight:%d,IQ:%d"%(age,height,weight,iq)
#Apuzzlefortheextracredit,typeitinanyway.
print"Hereisapuzzle."
what=add(age,subtract(height,multiply(weight,divide(iq,2))))
print"Thatbecomes:",what,"Canyoudoitbyhand"
print"Let'spracticeeverything."
print"You\'dneentoknow\'boutescapewith\\theatdo\nnewlinesand\ttabs"
poem="""
\tThelovelyworld
withlogicsofirmlyplanted
cannotdiscern\ntheneedsoflove
norcomprehendpassionfromintution
andrequiresanexplanation
\n\twherethereisnone.
print"------"
printpoem
five=10-2+3-6
print"Thisshouldbefive:%s"%five
defsecret_formula(started):
jelly_beans=started*500
jars=jelly_beans/1000
crates=jars/100
returnjelly_beans,jars,crates
start_point=10000
beans,jars,crates=secret_formula(start_point)
print"Withastartingpointof:%d"%start_point
print"We'dhave%dbeans,%djars,and%dcrates."%(beans,jars,crates)
start_point=start_point/10
print"Wecanalsodothatthisway:"
print"We'dhave%dbeans,%djars,and%dcrates."%secret_formula(start_point)
#函数return的几个值都可以用作结格式数据里面里面
defbreak_words(stuff):
'''Thisfunctionwillbreakupwordsforus.'''
#这些东西是放在'''之间的,文档注解,documentationcommnets,大型项目可供查阅!
#如何查阅?python-mpydocec25
words=stuff.split('')
returnwords
defsort_words(words):
"""Sortsthewords."""
returnsorted(words)#对单个词进行排序
defprint_first_word(words):
"""Printsthefirstwordafterpoppingifoff."""
word=words.pop(0)
printword
defprint_last_word(words):
"""Printsthelastwordafterpoppingifoff."""
word=words.pop(-1)
defsort_sentence(sentence):
"""Takesinafullsentenceandreturnsthesortedwords."""
words=break_words(sentence)
returnsort_words(words)#句子排序,先拆分词。
defprint_first_and_last(sentence):
"""Printsthefirstandlastwordsofthesentence."""
print_first_word(words)
print_last_word(words)
defprint_first_and_last_sorted(sentence):
"""Sortsthewordsthenprintsthefirstandlastone."""
words=sort_sentence(sentence)
#这一节学完,知道可以以后自己写函数作为脚本,然后不停的import就行,
#注意函数之间写文档注释,这个也很屌。
print"Youenteradarkroomwithtwodoors."
print"Doyougothroughdoor#1ordoor#2"
door=raw_input(">>>>>>")
ifdoor=="1":
print"There'sagiantbearhereeatingacheesecake.Whatdoyoudo"
print"1.Takethecake."
print"2.Screamatthebear."
bear=raw_input(">>>>>>")
ifbear=="1":
print"Thebeareatsyourfaceoff.Goodjob!"
elifbear=="2":
print"Thebeareatsyourlegsoff.Goodjob!"
else:
print"Well,doing%sisprobablybetter.Bearrunsaway."%bear
elifdoor=="2":
print"YoustareintotheendlessabyssatCthulhu'sretina."
print"1.Blueberries.\n2.Yellowjacketclothespins."
print"3.Understandingrevolversyellingmelodies."
insanity=raw_input(">>>>>>")
ifinsanity=="1"orinsanity=="2":
print"Yourbodysurviespoweredbyamindofjello.Goodjob!"
print"Theinsanityrotsyoureyesintoapoolofmuck.Goodjob!"
print"Yourstumblearoundandfallonaknifeanddie.Goodjob!"
i=0
numbers=[]
whilei<6:
print"Atthetopiis%d"%i
numbers.append(i)
i=i+1
print"NumbersNow:",numbers
print"Atthebottomiis%d"%i
print"Thenumbers:"
fornuminnumbers:
printnum
fromsysimportexit
defgold_room():
print"Thisroomisfullofgold.Howmuchdoyoutake"
next=raw_input(">~>")
if"0"innextor"1"innext:#判断输入是否有0或1,要包含所有的数字
how_much=int(next)
dead("Man,learntotypeanumber.")
ifhow_much<50:
print"Nice,you'renotgreedy,youwin!"
exit()
dead("Yougreedybastard!")
defbear_room():
print"Thereisabearhere."
print"Thebearhasabunchofhoney."
print"Thefatbearisinfrontofanotherdoor."
print"Howareyougoingtomovethebear"
bear_moved=False
whileTrue:
ifnext=="takehoney":
dead("Thebearlooksatyouthenslapsyourfaceoff.")
elifnext=="tauntbear"andnotbear_moved:
print"Thebearhasmovedfromthedoor.Youcangothroughitnow."
bear_moved=True
elifnext=="tauntbear"andbear_moved:
dead("Thebeargetspissedoffandchewsyourlegoff.")
elifnext=="opendoor"andbear_moved:
gold_room()
print"Igotnoideawhatthatmeans."
defcthulhu_room():
print"HereyouseethegreatevilCthulhu."
print"He,it,whateverstaresatyouandyougoinsane."
print"Doyoufleeforyourlifeoreatyourhead"
if"flee"innext:
start()#这边就起到回调的作用,游戏中的返回。。。很好用啊
elif"head"innext:
dead("Wellthatwastasty!")
cthulhu_room()
defdead(why):
printwhy,"Goodjob!"
exit(0)
defstart():
'''Gamestartfromhere!'''
print"Youareinadarkroom."
print"Thereisadoortoyourrightandleft."
print"whichonedoyoutake"
ifnext=="left":
bear_room()
elifnext=="right":
dead("Youstumblearoundtheroomuntilyoustarve.")
start()
ten_things="ApplesOrangesCrowsTelephoneLightSugar"
print"Waitthere'snot10thingsinthatlist,let'sfixthat."
stuff=ten_things.split('')
more_stuff=["Day","Night","Song","Frisbee","Corn","Banana","Girl","Boy"]
print"stuffis%r\nandit'slensis%d"%(stuff,len(stuff))
whilelen(stuff)!=10:
next_one=more_stuff.pop()#从more_stuff的最后一项挑出来放到stuff中
print"Adding:",next_one
stuff.append(next_one)#这种用法非常适合两个List之间互换
print"There's%ditemsnow."%len(stuff)
print"therewego:",stuff
print"Let'sdosomethingswithstuff."
printstuff[1]
printstuff[-1]
printstuff.pop()
print'<>'.join(stuff)#join的用法
print'#'.join(stuff[3:6])#下限是不包含的
stuff={1:"dahu",2:"daqing",3:"tech"}
#printstuff[2]
stuff['city']='jianhu'
#printstuff['city']
stuff[55]=2
#printstuff
cities={"CA":'SanFrancisco',"MI":'Detroit',"FL":'Jacksonville'}
cities["NY"]="NewYork"
cities["OR"]="Portland"
deffind_city(themap,state):
ifstateinthemap:
returnthemap[state]
return"Notfound."
#OKpayattention!
#cities["_find"]=find_city#函数也可以作为一个变量
print"State(Entertoquit)",
state=raw_input(">>>")
ifnotstate:break
#thislineisthemostimportant
#city_found=cities["_find"](cities,state)
#这个运行时会在字典里建立_find键,其实没必要
city_found=find_city(cities,state)
printcity_found
printcities
defadd100(x):
returnx+100
hh=[11,22,33]
a=map(add100,hh)
print"ais",a
defabc(a,b,c):
returna*10000+b*100+c
list1=[11,22,33]
list2=[44,55,66]
list3=[77,88,99]
b=map(abc,list1,list2,list3)
printb
c=map(None,list1)
printc
d=map(None,list1,list2,list3)
printd
fromrandomimportrandint
defdeath():
quips=["Youdied.Youkindasuckatthis.",
"Nicejob,youdied...jackass.",
"Suchaloser.",
"Ihaveasmallpuppythat'sbetteratthis."]
printquips[randint(0,len(quips)-1)]
defcentral_corridor():
print"TheGothonsofPlanetPercal#25haveinvadedyourshipanddestroyed"
print"yourentirecrew.Youarethelastsurvivingmemberandyourlast"
print"missionistogettheneutrondestructbombfromtheWeaponsArmory,"
print"putitinthebridge,andblowtheshipupaftergettingintoan"
print"escapepod.\n"
print"You'rerunningdownthecentralcorridortotheWeaponsArmorywhen"
print"aGothonjumpsout,redscalyskin,darkgrimyteeth,andevilclowncostume"
print"flowingaroundhishatefilledbody.He'sblockingthedoortothe"
print"Armoryandabouttopullaweapontoblastyou."
action=raw_input('''\nI'lgiveyousomeadvice>>
\nshoot!\tdodge!\ttellajoke\t\n>>''')
ifaction=="shoot!":
print"QuickonthedrawyouyankoutyourblasterandfireitattheGothon."
print"Hisclowncostumeisflowingandmovingaroundhisbody,whichthrows"
print"offyouraim.Yourlaserhitshiscostumebutmisseshimentirely.This"
print"completelyruinshisbrandnewcostumehismotherboughthim,which"
print"makeshimflyintoaninsanerageandblastyourepeatedlyinthefaceuntil"
print"youaredead.Thenheeatsyou."
return'death'
elifaction=="dodge!":
print"Likeaworldclassboxeryoudodge,weave,slipandslideright"
print"astheGothon'sblastercranksalaserpastyourhead."
print"Inthemiddleofyourartfuldodgeyourfootslipsandyou"
print"bangyourheadonthemetalwallandpassout."
print"YouwakeupshortlyafteronlytodieastheGothonstompson"
print"yourheadandeatsyou."
elifaction=="tellajoke":
print"LuckyforyoutheymadeyoulearnGothoninsultsintheacademy."
print"YoutelltheoneGothonjokeyouknow:"
print"Lbhezbgurevffbsng,jurafurfvgfnebhaqgurubhfr,furfvgfnebhaqgurubhfr."
print"TheGothonstops,triesnottolaugh,thenbustsoutlaughingandcan'tmove."
print"Whilehe'slaughingyourunupandshoothimsquareinthehead"
print"puttinghimdown,thenjumpthroughtheWeaponArmorydoor."
return'laser_weapon_armory'
print"DOESNOTCOMPUTE!"
return'central_corridor'
deflaser_weapon_armory():
print"YoudoadiverollintotheWeaponArmory,crouchandscantheroom"
print"formoreGothonsthatmightbehiding.It'sdeadquiet,tooquiet."
print"Youstandupandruntothefarsideoftheroomandfindthe"
print"neutronbombinitscontainer.There'sakeypadlockonthebox"
print"andyouneedthecodetogetthebombout.Ifyougetthecode"
print"wrong10timesthenthelockclosesforeverandyoucan't"
print"getthebomb.Thecodeis3digits."
code="%d%d%d"%(randint(1,9),randint(1,9),randint(1,9))
print"Codeis%s"%code
guess=raw_input("[keypad]>")
guesses=0
whileguess!=codeandguesses<10:
print"BZZZEDD!"
guesses+=1
ifguess==code:
print"Thecontainerclicksopenandthesealbreaks,lettinggasout."
print"Yougrabtheneutronbombandrunasfastasyoucantothe"
print"bridgewhereyoumustplaceitintherightspot."
return'the_bridge'
print"Thelockbuzzesonelasttimeandthenyouhearasickening"
print"meltingsoundasthemechanismisfusedtogether."
print"Youdecidetositthere,andfinallytheGothonsblowupthe"
print"shipfromtheirshipandyoudie."
defthe_bridge():
print"YouburstontotheBridgewiththeneutrondestructbomb"
print"underyourarmandsurprise5Gothonswhoaretryingto"
print"takecontroloftheship.Eachofthemhasanevenuglier"
print"clowncostumethanthelast.Theyhaven'tpulledtheir"
print"weaponsoutyet,astheyseetheactivebombunderyour"
print"armanddon'twanttosetitoff."
\nthrowthebomb\tslowlyplacethebomb\t\n>>''')
ifaction=="throwthebomb":
print"InapanicyouthrowthebombatthegroupofGothons"
print"andmakealeapforthedoor.Rightasyoudropita"
print"Gothonshootsyourightinthebackkillingyou."
print"AsyoudieyouseeanotherGothonfranticallytrytodisarm"
print"thebomb.Youdieknowingtheywillprobablyblowupwhen"
print"itgoesoff."
elifaction=="slowlyplacethebomb":
print"Youpointyourblasteratthebombunderyourarm"
print"andtheGothonsputtheirhandsupandstarttosweat."
print"Youinchbackwardtothedoor,openit,andthencarefully"
print"placethebombonthefloor,pointingyourblasteratit."
print"Youthenjumpbackthroughthedoor,punchtheclosebutton"
print"andblastthelocksotheGothonscan'tgetout."
print"Nowthatthebombisplacedyouruntotheescapepodto"
print"getoffthistincan."
return'escape_pod'
return"the_bridge"
defescape_pod():
print"Yourushthroughtheshipdesperatelytryingtomakeitto"
print"theescapepodbeforethewholeshipexplodes.Itseemslike"
print"hardlyanyGothonsareontheship,soyourrunisclearof"
print"interference.Yougettothechamberwiththeescapepods,and"
print"nowneedtopickonetotake.Someofthemcouldbedamaged"
print"butyoudon'thavetimetolook.There's5pods,whichone"
print"doyoutake"
good_pod=randint(1,5)
print"good_podis%d"%good_pod
guess=raw_input("[pod#]>")
ifint(guess)!=good_pod:
print"Youjumpintopod%sandhittheejectbutton."%guess
print"Thepodescapesoutintothevoidofspace,then"
print"implodesasthehullruptures,crushingyourbody"
print"intojamjelly."
print"Thepodeasilyslidesoutintospaceheadingto"
print"theplanetbelow.Asitfliestotheplanet,youlook"
print"backandseeyourshipimplodethenexplodelikea"
print"brightstar,takingouttheGothonshipatthesame"
print"time.Youwon!"
Rooms={
'death':death,
'central_corridor':central_corridor,
'laser_weapon_armory':laser_weapon_armory,
'the_bridge':the_bridge,
'escape_pod':escape_pod}
defrunner(map,start):
next=start
room=map[next]
print"\n------"
next=room()#这句话操作层面算是理解了,
#但是按顺序应该在---的后面,但在powersheel中出现在前面,这是为什么
print">>next<<",next
runner(Rooms,'central_corridor')
#printlen(quips)-1
a=randint(0,3)#取随机数的两端都可以取到!
printa
printquips[a]
death()
classA:
def__init__(self):
self.name='zhangjing'
self.age='24'
defmethod(self):
print"methodprint"
Instance=A()
printgetattr(Instance,'name')#如果Instance对象中有属性name则打印self.name的值,否则打印'notfind'
printgetattr(Instance,'age')#如果Instance对象中有属性age则打印self.age的值,否则打印'notfind'
printgetattr(Instance,'method','default')
#如果有方法method,打印其地址,否则打印default
printgetattr(Instance,'method','default')()
#如果有方法method,运行函数并打印None否则打印default
classGame(object):
def__init__(self,start):
self.quips=["Youdied.Youkindasuckatthis.",
"Ihaveasmallpuppythat'sbetteratthis."
]
self.start=start
defplay(self):
next=self.start
print"\n-----"
room=getattr(self,next)
next=room()
defdeath(self):
printself.quips[randint(0,len(self.quips)-1)]
defcentral_corridor(self):
deflaser_weapon_armory(self):
defthe_bridge(self):
\nthrowthebomb\nslowlyplacethebomb\t\n>>''')
defescape_pod(self):
a_game=Game("central_corridor")
a_game.play()
defconvert_number(s):
try:
returnint(s)
exceptValueError:
returnNone
s=raw_input("PLZ>>")
print(convert_number(s))
importos.path
path='H:\python_program\shiyanlou\saile.txt'
print''
print(os.path.basename(path))
print(os.path.dirname(path))
info=os.path.split(path)
path2=os.path.join('/','python_program','shiyanlou','saile.txt')
printpath2
#这里的斜杠注意下,win7里面是"\",而实验楼里面的是"/",这个影响大不大
a='H:\python_program\shiyanlou\..'
#print(os.path.normpath(a))
print"pathis%r"%path
print('exit',os.path.exists(path))
print('size',os.path.getsize(path))
print('lastreadtime',os.path.getatime(path))
print('lastedittime',os.path.getmtime(path))
print('pathtofile',os.path.isfile(path))
print('pathtodir',os.path.isdir(path))
importglob
print(glob.glob("H:\python_program\shiyanlou\*"))
#该命令找出文件夹下所有文件。
importos
path='H:\python_program\shiyanlou\wc'
#这里需要注意下,用mkdir创建文件目录时,最后一个不用\
#os.mkdir(path)#创建新目录
#os.rmdir(path)#删除空目录
#a=os.listdir(path)#返回目录中所有文件。相当于$ls命令,存起来
#printa
#path='H:\python_program\shiyanlou\wc\saile.txt'
#os.remove(path)#删除path指向的文件。path指向某个文件,注意文件名与\的作用。
#path1='H:\python_program\shiyanlou\wc2\saile.txt'
#path2='H:\python_program\shiyanlou\wc2\what.txt'
#os.rename(path1,path2)
#重命名文件,src和ds为两个路径,分别表示重命名之前和之后的路径。
#重命名后,path1消失了,path2产生了,就是重命名文件夹,试试重命名文件,文件也是可以的。
print(os.getcwd())#查询当前工作路径
importshutil
print(os.getcwd())
shutil.copy('a.txt','b.txt')
#copy(src,dst)复制文件,从src到dst。相当于$cp命令。
#move(src,dst)移动文件,从src到dst。相当于$mv命令。
#运用此命令需要先确定文件的位置,一开始确定工作区也是可行的!
importpickle
classBird(object):
have_feather=True
way_of_reproduction='egg'
summer=Bird()
picklestring=pickle.dumps(summer)
printpicklestring
fn='a.pkl'
withopen(fn,'w')asf:
picklestring=pickle.dump(summer,f)
#这个最后结果是none,不知哪里wrong
printsummer
#是放在summer里面的。握草,那为什么picklestring里面是none?
withopen(fn,'r')asf:
summer=pickle.load(f)
importsubprocess
child=subprocess.Popen(["ping","www.baidu.com"])
#child.wait()
print"parentprocess"
out=subprocess.call("ls-l",shell=True)
out=subprocess.call("cd..",shell=True)
child1=subprocess.Popen(["print","abcd"],stdout=subprocess.PIPE)
child2=subprocess.Popen(["wc"],stdin=child1.stdout,stdout=subprocess.PIPE)
out=child2.communicate()
print(out)
#Aprogramtosimulatesellingticketsinmulti-threadway
#WrittenbyVamei
importthreading
importtime
#Thisfunctioncouldbeanyfunctiontodootherchores.
defdoChore():
time.sleep(0.2)
#Functionforeachthread
defbooth(tid):
globali
globallock
lock.acquire()#Lock;orwaitifotherthreadisholdingthelock
ifi!=0:
i=i-1#Selltickets
print(tid,':nowleft:',i)#Ticketsleft
doChore()#Othercriticaloperations
print("Thread_id",tid,"Nomoretickets")
os._exit(0)#Exitthewholeprocessimmediately
lock.release()#Unblock
doChore()#Non-criticaloperations
#Startofthemainfunction
i=100#Availableticketnumber
lock=threading.Lock()#Lock(i.e.,mutex)
#Start10threads
forkinrange(10):
new_thread=threading.Thread(target=booth,args=(k,))#Setupthread;target:thecallable(function)toberun,args:theargumentforthecallable
new_thread.start()#runthethread
用类写的
time.sleep(0.5)
classBoothThread(threading.Thread):
def__init__(self,tid,monitor):
self.tid=tid
self.monitor=monitor
threading.Thread.__init__(self)
defrun(self):
monitor['lock'].acquire()#Lock;orwaitifotherthreadisholdingthelock
ifmonitor['tick']!=0:
monitor['tick']=monitor['tick']-1#Selltickets
print(self.tid,':nowleft:',monitor['tick'])#Ticketsleft
print("Thread_id",self.tid,"Nomoretickets")
monitor['lock'].release()#Unblock
monitor={'tick':100,'lock':threading.Lock()}
new_thread=BoothThread(k,monitor)
new_thread.start()
importmultiprocessingasmul
defproc1(pipe):
pipe.send('hello')
print('proc1rec:',pipe.recv())
defproc2(pipe):
print('proc2rec:',pipe.recv())
pipe.send('hello,too')
#Buildapipe
pipe=mul.Pipe()
#Passanendofthepipetoprocess1
p1=mul.Process(target=proc1,args=(pipe[0],))
#Passtheotherendofthepipetoprocess2
p2=mul.Process(target=proc2,args=(pipe[1],))
p1.start()
p2.start()
p1.join()
p2.join()
#coding=gbk
s="中文"
s1=u"中文"
s2=unicode(s,"gbk")#省略参数将用python默认的ASCII来解码
s3=s.decode("gbk")#把str转换成unicode是decode,unicode函数作用与之相同
printlen(s)
printlen(s1)
printlen(s2)
printlen(s3)
importcodecs
#printopen("file.txt").read().decode("utf-8")
printopen("file.txt").read()
#文本类型的文件读取,在utf-8和ANSI编码之间的切换。
fromPILimportImage
importargparse
ascii_char=list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]-_+~<>i!lI;:,\"^`'.")#字符全放在表里面,注意他们的使用方式
#printascii_char
#printlen(ascii_char)
#a=list("!@#$%")#fk,居然直接连起来就OK
defget_char(r,g,b,alpha=256):#RGB值输进去,能转换成对应的字符编码
ifalpha==0:
return''
length=len(ascii_char)
gray=int(0.2126*r+0.7152*g+0.0722*b)
unit=(256.0+1)/length
returnascii_char[int(gray/unit)]
a=get_char(32,32,32,256)
#~~~~~argparse部分学习
parser=argparse.ArgumentParser()
parser.add_argument("echo")
args=parser.parse_args()
printargs.echo
#~~~~~~~~~~~
parser.add_argument("--verbosity",help="increaseoutputverbosity")
ifargs.verbosity:
print"verbosityturnedon"
#~~~~~~~
parser.add_argument("--verbose",help="increaseoutputverbosity",
action="store_true")
ifargs.verbose:
parser.add_argument("-v","--verbose",help="increaseoutputverbosity",
#~~~~~~~~~~~~~
parser.add_argument("square",type=int,
help="displayasquareofagivennumber")
parser.add_argument("-v","--verbose",action="store_true",
help="increaseoutputverbosity")
answer=args.square**2
print"thesquareof{}equals{}".format(args.square,answer)
printanswer
'''Run
这个例子有点大彻大悟的感觉啊,可以不停的加简写,多个参数就都输入,再试试别的,很好!
$pythonprog.py
usage:prog.py[-h][-v]square
prog.py:error:thefollowingargumentsarerequired:square
$pythonprog.py4
16
$pythonprog.py4--verbose
thesquareof4equals16
$pythonprog.py--verbose4
thesquareof4equals16'''
parser.add_argument("-v","--verbosity",type=int,
ifargs.verbosity==2:
elifargs.verbosity==1:
print"{}^2=={}".format(args.square,answer)
'''运行:
$pythonprog.py4-v
usage:prog.py[-h][-vVERBOSITY]square
prog.py:error:argument-v/--verbosity:expectedoneargument
$pythonprog.py4-v1
4^2==16握草,这是给cerbosity赋值来操作啊,我就想到VBA里面各种参数的东西
$pythonprog.py4-v2
$pythonprog.py4-v3
16'''
#除了最后一个暴露了一个bug,其他的看起都来运行良好。让我们通过限制--verbosity后面跟的值来修正:
parser.add_argument("-v","--verbosity",type=int,choices=[0,1,2],
运行:
usage:prog.py[-h][-v{0,1,2}]square
prog.py:error:argument-v/--verbosity:invalidchoice:3(choosefrom0,1,2)
$pythonprog.py4-h
positionalarguments:
squaredisplayasquareofagivennumber
optionalarguments:
-h,--helpshowthishelpmessageandexit
-v{0,1,2},--verbosity{0,1,2}
increaseoutputverbosity'''
#~~~~~~~~~~~~
help="displaythesquareofagivennumber")
parser.add_argument("-v","--verbosity",action="count",
'''我们引入了另一个关键词count来统计可选参数出现的次数:
4^2==16
$pythonprog.py4-vv
$pythonprog.py4--verbosity--verbosity
prog.py:error:unrecognizedarguments:1
-v,--verbosityincreaseoutputverbosity
$pythonprog.py4-vvv
#~~~~~~~~
#bugfix:replace==with>=
ifargs.verbosity>=2:
elifargs.verbosity>=1:
#运行如下:
#$pythonprog.py4-vvv
#thesquareof4equals16
#$pythonprog.py4-vvvv
#$pythonprog.py4
#Traceback(mostrecentcalllast):
#File"prog.py",line11,in
#ifargs.verbosity>=2:
#TypeError:unorderabletypes:NoneType()>=int()
parser.add_argument("-v","--verbosity",action="count",default=0,
#~~~~~~~~~
#如果我们想扩展程序的功能,而不仅仅是求平方:
parser.add_argument("x",type=int,help="thebase")
parser.add_argument("y",type=int,help="theexponent")
parser.add_argument("-v","--verbosity",action="count",default=0)
answer=args.x**args.y
print"{}tothepower{}equals{}".format(args.x,args.y,answer)
print"{}^{}=={}".format(args.x,args.y,answer)
#输出:
#$pythonprog.py
#usage:prog.py[-h][-v]xy
#prog.py:error:thefollowingargumentsarerequired:x,y
#$pythonprog.py-h
#positionalarguments:
#xthebase
#ytheexponent
#optionalarguments:
#-h,--helpshowthishelpmessageandexit
#-v,--verbosity
#$pythonprog.py42-v
#4^2==16
print"Running'{}'".format(__file__)
ifargs.verbosity>=1:
print"{}^{}==".format(args.x,args.y),
#$pythonprog.py42
#16
#$pythonprog.py42-vv
#Running'prog.py'
#命名的时候不要乱写
group=parser.add_mutually_exclusive_group()
group.add_argument("-v","--verbose",action="store_true")
group.add_argument("-q","--quiet",action="store_true")
ifargs.quiet:
elifargs.verbose:
parser=argparse.ArgumentParser(description="calculateXtothepowerofY")
#命令行输入参数处理
parser.add_argument('file')#输入文件
parser.add_argument('-o','--output')#输出文件
parser.add_argument('-w','--width',type=int,default=80)#输出字符画宽
parser.add_argument('-he','--height',type=int,default=80)#输出字符画高
#获取参数ascii_dora.png
IMG=args.file
WIDTH=args.width
HEIGHT=args.height
OUTPUT=args.output
ascii_char=list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]-_+~<>i!lI;:,\"^`'.")
#将256灰度映射到70个字符上
defget_char(r,g,b,alpha=256):
if__name__=='__main__':
im=Image.open(IMG)
im=im.resize((WIDTH,HEIGHT),Image.NEAREST)
txt=""
foriinrange(HEIGHT):
forjinrange(WIDTH):
txt+=get_char(*im.getpixel((j,i)))#获取相应的像素
txt+='\n'
printtxt
#字符画输出到文件
ifOUTPUT:#如果加了output的选项,其实就相当于你定义一个输出的名字和类型
withopen(OUTPUT,'a+')asf:#打开只写文件,这边也可以考虑用'a+'的形式,我觉得就像是日志一样(log),所有的操作都附着在最后,做个记录,我试试,果然是OK的。
f.write(txt)
withopen("output.txt",'a+')asf:#你这边不定义-o的话,就会输出output.txt
#-*-coding:utf-8-*-
importcurses
fromrandomimportrandrange,choice#generateandplacenewtile
fromcollectionsimportdefaultdict
letter_codes=[ord(ch)forchin'WASDRQwasdrq']#chr和ord互为相反操作,别的进制有特殊的格式
letter_codes=letter_codes+[259,260,258,261,114,113]
actions=['Up','Left','Down','Right','Restart','Exit']
actions_dict=dict(zip(letter_codes,actions*3))#将输入与行为进行关联:
#游戏经过改装,加了方向键,nice!↑←↓→
defget_user_action(keyboard):
'''用户输入处理,阻塞+循环,直到获得用户有效输入才返回对应行为:'''
char="N"
whilecharnotinactions_dict:
char=keyboard.getch()#获取输入一遍使用getch()方法,这个方法暂停等待用户输入,getch()返回一个整数,在0到255之间,表示输入字符的ASCII值
#也就是说getch()得到的数字和ord的数字格式一致
returnactions_dict[char]
deftranspose(field):
'''矩阵转置'''
return[list(row)forrowinzip(*field)]
definvert(field):
'''矩阵逆转,不是逆矩阵'''
return[row[::-1]forrowinfield]
classGameField(object):
'''创建棋盘,初始化棋盘的参数,可以指定棋盘的高和宽以及游戏胜利条件,默认是最经典的4x4~2048。'''
def__init__(self,height=4,width=4,win=2048):
self.height=height
self.width=width
self.win_value=2048
self.score=0
self.highscore=0
self.reset()
defreset(self):
'''重置棋盘'''
ifself.score>self.highscore:
self.highscore=self.score
self.field=[[0foriinrange(self.width)]forjinrange(self.height)]#创建4*4的棋盘
self.spawn()
self.spawn()#初始化的过程,刚开始生成两个随机数
defmove(self,direction):
'''棋盘走一步,通过对矩阵进行转置与逆转,可以直接从左移得到其余三个方向的移动操作'''
defmove_row_left(row):
'''棋盘一行向左合并'''
deftighten(row):#squeesenon-zeroelementstogether,变紧
new_row=[iforiinrowifi!=0]#快速循环,并排除某一项,循环对象是i
new_row+=[0foriinrange(len(row)-len(new_row))]#循环对象是0
returnnew_row
defmerge(row):#合并
pair=False
new_row=[]
foriinrange(len(row)):
ifpair:
new_row.append(2*row[i])
self.score+=2*row[i]
ifi+1 pair=True new_row.append(0) new_row.append(row[i]) assertlen(new_row)==len(row) returntighten(merge(tighten(row))) moves={} moves['Left']=lambdafield:\ [move_row_left(row)forrowinfield] moves['Right']=lambdafield:\ invert(moves['Left'](invert(field))) moves['Up']=lambdafield:\ transpose(moves['Left'](transpose(field))) moves['Down']=lambdafield:\ transpose(moves['Right'](transpose(field))) ifdirectioninmoves: ifself.move_is_possible(direction): self.field=moves[direction](self.field) returnTrue returnFalse defis_win(self): '''判断输赢''' returnany(any(i>=self.win_valueforiinrow)forrowinself.field)#any的用法,只要有一个true就是true defis_gameover(self): returnnotany(self.move_is_possible(move)formoveinactions) defdraw(self,screen): '''绘制游戏界面''' help_string1='(W)Up(S)Down(A)Left(D)Right' help_string2='(R)Restart(Q)Exit' gameover_string='GAMEOVER' win_string='YOUWIN!' defcast(string):#换行显示对应字符 screen.addstr(string+'\n') defdraw_hor_separator():#画分隔符 line='+'+('+------'*self.width+'+')[1:] separator=defaultdict(lambda:line)#separator就是字典,line就为默认值 ifnothasattr(draw_hor_separator,"counter"):#如果没有这个属性或方法 draw_hor_separator.counter=0 cast(separator[draw_hor_separator.counter]) draw_hor_separator.counter+=1#分隔符计数 defdraw_row(row): cast(''.join('|{:^5}'.format(num)ifnum>0else'|'fornuminrow)+'|')#主要网格的绘制,数组里面要是有东西,就显示出来,没有就空着,用空字符隔开 #重点掌握了{}.format的用法 screen.clear() cast('SCORE:'+str(self.score)) if0!=self.highscore: cast('HGHSCORE:'+str(self.highscore)) forrowinself.field: draw_hor_separator() draw_row(row) ifself.is_win(): cast(win_string) ifself.is_gameover(): cast(gameover_string) cast(help_string1) cast(help_string2) defspawn(self): '''棋盘操作,随机生成1个2或4''' new_element=4ifrandrange(100)>89else2 (i,j)=choice([(i,j)foriinrange(self.width)forjinrange(self.height)ifself.field[i][j]==0]) self.field[i][j]=new_element defmove_is_possible(self,direction): '''判断能否移动''' defrow_is_left_movable(row): defchange(i):#trueifthere'llbechangeini-thtile ifrow[i]==0androw[i+1]!=0:#Move ifrow[i]!=0androw[i+1]==row[i]:#Merge returnany(change(i)foriinrange(len(row)-1)) check={} check['Left']=lambdafield:\ any(row_is_left_movable(row)forrowinfield) check['Right']=lambdafield:\ check['Left'](invert(field)) check['Up']=lambdafield:\ check['Left'](transpose(field)) check['Down']=lambdafield:\ check['Right'](transpose(field)) ifdirectionincheck: returncheck[direction](self.field) defmain(stdscr): definit(): #重置游戏棋盘 game_field.reset() return'Game' defnot_game(state): #画出GameOver或者Win的界面 game_field.draw(stdscr) #读取用户输入得到action,判断是重启游戏还是结束游戏 action=get_user_action(stdscr) responses=defaultdict(lambda:state)#默认是当前状态,没有行为就会一直在当前界面循环 responses['Restart'],responses['Exit']='Init','Exit'#对应不同的行为转换到不同的状态 returnresponses[action] defgame(): #画出当前棋盘状态 #读取用户输入得到action ifaction=='Restart': return'Init' ifaction=='Exit': return'Exit' ifgame_field.move(action):#movesuccessful ifgame_field.is_win(): return'Win' ifgame_field.is_gameover(): return'Gameover' state_actions={ 'Init':init, 'Win':lambda:not_game('Win'), 'Gameover':lambda:not_game('Gameover'), 'Game':game } curses.use_default_colors() game_field=GameField(win=32) state='Init' #状态机开始循环 whilestate!='Exit': state=state_actions[state]() curses.wrapper(main) #fromrandomimportrandrange,choice #fromcollectionsimportdefaultdict ta=[1,2,3,4,5,6] tb=[9,8,7] tx=ta+tb print"txis\n",tx xx=ta*2#数组扩展 printxx tc=['a','b','c'] bb=zip(ta,tc) printbb aa=dict(zip(ta,tc*2))#实验可知,tc这边重复了,就用*2来表示。zip表示交叉对应 printaa letter_codes=[ord(ch)forchin'WASDRQwasdrq']#返回字母对应的数字 x=5 foriinrange(5): x+=10 printx ne=any(i<=-1foriinrange(5)) #ne.append(5) print"neis",ne printletter_codes print"codeis\n",letter_codes actions_dict=dict(zip(letter_codes,actions*3)) printactions_dict #-*-coding:UTF-8-*- stdscr=curses.initscr()#初始化 defdisplay_info(str,x,y,colorpair=4): '''''使用指定的colorpair显示文字''' globalstdscr stdscr.addstr(y,x,str,curses.color_pair(colorpair)) stdscr.refresh() defget_ch_and_continue(): '''''演示pressanykeytocontinue''' #设置nodelay,为0时会变成阻塞式等待 stdscr.nodelay(0) #输入一个字符 ch=stdscr.getch() #重置nodelay,使得控制台可以以非阻塞的方式接受控制台输入,超时1秒 stdscr.nodelay(1) defset_win(): '''''控制台设置''' #使用颜色首先需要调用这个方法 curses.start_color() #文字和背景色设置,设置了两个colorpair,分别为1和2 curses.init_pair(3,curses.COLOR_GREEN,curses.COLOR_BLACK) curses.init_pair(4,curses.COLOR_RED,curses.COLOR_BLACK) curses.init_pair(5,curses.COLOR_CYAN,curses.COLOR_WHITE) #关闭屏幕回显 curses.noecho() #输入时不需要回车确认 curses.cbreak() #设置nodelay,使得控制台可以以非阻塞的方式接受控制台输入,超时1秒 defunset_win(): '''控制台重置''' globalstdstr #恢复控制台默认设置(若不恢复,会导致即使程序结束退出了,控制台仍然是没有回显的) curses.nocbreak()#关闭字符终端功能(只有回车时才发生终端) stdscr.keypad(0) curses.echo()#打开输入回显功能 curses.endwin()#结束窗口,恢复默认设置 set_win() display_info('Hola,curses!',10,20,5)#第一个参数是y,第二个是x display_info('Pressanykeytocontinue...',0,10,3) get_ch_and_continue() exceptException,e: raisee finally: unset_win() begin_x=20;begin_y=27 height=15;width=40 win=curses.newwin(height,width,begin_y,begin_x) pad=curses.newpad(100,100) #Theseloopsfillthepadwithletters;thisis #explainedinthenextsection foryinrange(0,10): forxinrange(0,10): pad.addch(y,x,ord('a')+(x*x+y*y)%26) exceptcurses.error: pass #Displaysasectionofthepadinthemiddleofthescreen pad.refresh(0,0,5,5,20,75)#refreshe重绘窗口 #研究curses的一些用法 letter_codes=[ord(ch)forchin'WASDRQwasdrq'] actions_dict=dict(zip(letter_codes,actions*2)) a=[[i**3foriinrange(4)]forjinrange(4)]#这边是控制数组大小的 print"ais\n",a,'typeis',type(a) a.clear() b=''.join('|{:^5}'.format(num)ifnum>=0else'|'fornuminrow)+'|' printb#这边是控制里面的数字出不出现的 defdraw_row1(row): b=''.join('|{:^5}'.format(num)ifnum>1else'|'fornuminrow) forrowina: #draw_row(row) draw_row1(row) x=''.join('|{:^5}'.format(num)ifnum>=0else'|'fornumin[1,2,3,4]) print"\n",x line='+'+('+------'*4+'+')[1:] print"lineis\n",line lin=('+------'*4+'+') print"lineingis\n",lin #矩阵转换的一些用法 fromrandomimportrandrange,choice #学习defaultdict的用法 #-------一开始,字典里是空的就会报错 #counts=dict() #counts['puppy']+=1 #-------试试if条件判断 strings=('puppy','kitten','puppy','puppy', 'weasel','puppy','kitten','puppy') counts={} forkwinstrings: ifkwnotincounts:#一开始字典counts里是空的,所以第一个字符出现的时候肯定是没有的,那统计数量就会出错,这里进行if判断就OK了。 counts[kw]=1 print'notin',counts counts[kw]+=1 printcounts #--------使用dict.setdefault()方法设置默认值 #dict.setdefault()方法接收两个参数,第一个参数是健的名称,第二个参数是默认值。假如字典中不存在给定的键,则返回参数中提供的默认值;反之,则返回字典中保存的值。 counts.setdefault(kw,0) #--------上述方法更简洁一点 counts[kw]=counts.setdefault(kw,0)+1 #---------使用collections.defaultdict类 dd=defaultdict(list) printdd dd['foo'] dd['bar'].append('quux') #--------- print('something'indd) #dd.pop('something') dd.get('something') printdd['something'] #---------使用zero后不用初始化 defzero(): return0 dd=defaultdict(zero) #printdd printdd['foo'] counts=defaultdict(lambda:10)#使用lambda来定义简单的函数,设定默认值 forsinstrings: counts[s]+=1 #printdefaultdict.__missing__.__doc__ actions=['Up','Left','Down','Right','Restart','Exit']#(259,260,258,261,114,113) char=keyboard.getch() printchar a=get_user_action(stdscr) classtest(): name="xiaohua" return"HelloWord" t=test() printt.name printt.run() #Python的hasattr()getattr()setattr()函数使用方法详解 print(hasattr(t,"name")) print(hasattr(t,"run")) #------ >>>classtest(): 2...name="xiaohua" 3...defrun(self): 4...return"HelloWord" 5... 6>>>t=test() 7>>>getattr(t,"name")#获取name属性,存在就打印出来。 8'xiaohua' 9>>>getattr(t,"run")#获取run方法,存在就打印出方法的内存地址。 10 11>>>getattr(t,"run")()#获取run方法,后面加括号可以将这个方法运行。 12'HelloWord' 13>>>getattr(t,"age")#获取一个不存在的属性。 14Traceback(mostrecentcalllast): 15File" 16AttributeError:testinstancehasnoattribute'age' 17>>>getattr(t,"age","18")#若属性不存在,返回一个默认值。 18'18' 19>>> #------------ setattr(object,name,values) 给对象的属性赋值,若属性不存在,先创建再赋值。 1>>>classtest(): 7>>>hasattr(t,"age")#判断属性是否存在 8False 9>>>setattr(t,"age","18")#为属相赋值,并没有返回值 10>>>hasattr(t,"age")#属性存在了 11True 12>>> 综合运用 一种综合的用法是:判断一个对象的属性是否存在,若不存在就添加该属性。 7>>>getattr(t,"age")#age属性不存在 8Traceback(mostrecentcalllast): 9File" 10AttributeError:testinstancehasnoattribute'age' 11>>>getattr(t,"age",setattr(t,"age","18"))#age属性不存在时,设置该属性 12'18' 13>>>getattr(t,"age")#可检测设置成功 14'18' 15>>> #通过位置 #In[1]:'{0},{1}'.format('kzc',18) #Out[1]:'kzc,18' #In[2]:'{},{}'.format('kzc',18) #Out[2]:'kzc,18' #In[3]:'{1},{0},{1}'.format('kzc',18) #Out[3]:'18,kzc,18' a='{0},{1}'.format('kzc',18) a='{},{}'.format('kzc',18) a='{1},{0},{1}'.format('kzc',18) #通过关键字参数 #In[5]:'{name},{age}'.format(age=18,name='kzc') #Out[5]:'kzc,18' a='{name},{age}'.format(age=18,name='kzc') #通过对象属性 classPerson: def__init__(self,name,age): self.name,self.age=name,age def__str__(self): return'Thisguyis{self.name},is{self.age}old'.format(self=self) a=str(Person('kzc',18)) print"\nais>>>",a #通过下标 #In[7]:p=['kzc',18] #In[8]:'{0[0]},{0[1]}'.format(p) #Out[8]:'kzc,18' p=['kzc',18] q=['kzc',183] b='{0[0]},{0[1]}'.format(q) print"\nbis>>>",b #填充与对齐 #填充常跟对齐一起使用 #^、<、>分别是居中、左对齐、右对齐,后面带宽度 #:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充 #比如 #In[15]:'{:>8}'.format('189') #Out[15]:'189' #In[16]:'{:0>8}'.format('189') #Out[16]:'00000189' #In[17]:'{:a>8}'.format('189') #Out[17]:'aaaaa189' a='{:>8}'.format('189') a='{:0>8}'.format('189') #精度与类型f #精度常跟类型f一起使用 #In[44]:'{:.2f}'.format(321.33345) #Out[44]:'321.33' a='{:.2f}'.format(321.33345) #用,号还能用来做金额的千位分隔符。 #In[47]:'{:,}'.format(1234567890) #Out[47]:'1,234,567,890' a='{:,}'.format(1234567890) #foriinxrange(500): #print#这个方法有点二 importsys os.system('cls') #这才是对的 defreadfile(filename): '''Printafiletothestandardoutput.''' f=file(filename) line=f.readline() iflen(line)==0: break printline,#noticecomma f.close() #Scriptstartsfromhere iflen(sys.argv)<2: print'Noactionspecified.' sys.exit() ifsys.argv[1].startswith('--'): option=sys.argv[1][2:] #fetchsys.argv[1]butwithoutthefirsttwocharacters ifoption=='version': print'Version1.2' elifoption=='help': print'''\ Thisprogramprintsfilestothestandardoutput. Anynumberoffilescanbespecified. Optionsinclude: --version:Printstheversionnumber --help:Displaythishelp''' print'Unknownoption.' forfilenameinsys.argv[1:]: readfile(filename)#读取文件内容 classwoman(): def__init__(self,a,b): self.name=a self.age=b*2 printself.name,self.age classman(): self.age=b classboy(woman,man): defsayhi(): print"wtf" #可以继承多个类,但是两者相冲突的话,选择放在前面的执行 xiaoming=boy('xm',13) def__init__(self,name): self.name=name defsayHi(self): print"Hello,mynameis",self.name p=Person("swaroop") p.sayHi() f=file('poem.txt') foriinrange(len(line)): ifline[i]=='': time.sleep(0.1) sys.stdout.write(line[i])#如何让一行显示? time.sleep(0.05) #这个想办法如何做成一个模拟打字显示的样子? #----print和sys.stdout.write的区别!!后者可以无缝接着输出!nice print'Closedthefile.' #!/usr/bin/python importTkinter top=Tkinter.Tk() #进入消息循环 top.mainloop() fromTkinterimport*#导入Tkinter库 root=Tk()#创建窗口对象的背景色 #创建两个列表 li=['C','python','php','html','SQL','java'] movie=['CSS','jQuery','Bootstrap'] listb=Listbox(root)#创建两个列表组件 listb2=Listbox(root) foriteminli:#第一个小部件插入数据 listb.insert(1,item) foriteminmovie:#第二个小部件插入数据 listb2.insert(0,item) listb.pack()#将小部件放置到主窗口中 listb2.pack() root.mainloop()#进入消息循环 classSchoolMember: '''Representsanyschoolmember.''' self.age=age print'(InitializedSchoolMember:%s)'%self.name deftell(self): '''Tellmydetails.''' print'Name:"%s"Age:"%s"'%(self.name,self.age), classTeacher(SchoolMember): '''Representsateacher.''' def__init__(self,name,age,salary): SchoolMember.__init__(self,name,age) self.salary=salary print'(InitializedTeacher:%s)'%self.name SchoolMember.tell(self) print'Salary:"%d"'%self.salary classStudent(SchoolMember): '''Representsastudent.''' def__init__(self,name,age,marks): self.marks=marks print'(InitializedStudent:%s)'%self.name print'Marks:"%d"'%self.marks t=Teacher('Mrs.Shrividya',40,30000) s=Student('Swaroop',22,75) print""#printsablankline members=[t,s] formemberinmembers: member.tell()#worksforbothTeachersandStudents #调用子类方法时,现在子类中进行调用,如果子类没有,然后再在父类中调用 defmake_repeater(n): returnlambdas:s*n#lambda语句用来创建函数对象,返回表达式的值 twice=make_repeater(2) printtwice('word') printtwice(5) listone=[2,3,4] listtwo=[2*iforiinlistoneifi>2] printlisttwo print"Hello,wtf" p=Person() print"Hi,thisismymodulespeaking!" version='0.1' #importmy_module #my_module.sayhi() #print'version',my_module.version frommy_moduleimport* sayhi() print'version',version #这边注意,import的*用法,前面需要加对应库,有*的则不需要 importcPickleasp #importpickleasp shoplistfile='shoplist.data' #thenameofthefilewherewewillstoretheobject shoplist=['apple','mango','carrot'] #Writetothefile f=file(shoplistfile,'w') p.dump(shoplist,f)#dumptheobjecttoafile储存 delshoplist#removetheshoplist #Readbackfromthestorage f=file(shoplistfile) storedlist=p.load(f)#读取 printstoredlist defpowersum(power,*args): total=0 foriinargs: total+=pow(i,power) returntotal print(powersum(2,3,4)) print(powersum(2,10,10,10)) print"I", print"love", print'you!' sys.stdout.write("I") sys.stdout.write("love") sys.stdout.write('you!') exitFlag=0 classmyThread(threading.Thread):#继承父类threading.Thread def__init__(self,threadID,name,counter): self.threadID=threadID self.counter=counter defrun(self):#把要执行的代码写到run函数里面线程在创建后会直接运行run函数 print"Starting"+self.name print_time(self.name,self.counter,5) print"Exiting"+self.name defprint_time(threadName,delay,counter): whilecounter: ifexitFlag: thread.exit() time.sleep(delay) print"%s:%s"%(threadName,time.ctime(time.time())) counter-=1 #创建新线程 thread1=myThread(1,"Thread-1",1) thread2=myThread(2,"Thread-2",2) #开启线程 thread1.start() thread2.start() print"ExitingMainThread" classmyThread(threading.Thread): #获得锁,成功获得锁定后返回True #可选的timeout参数不填时将一直阻塞直到获得锁定 #否则超时后将返回False threadLock.acquire() #释放锁 threadLock.release() threadLock=threading.Lock() threads=[] #开启新线程 #添加线程到线程列表 threads.append(thread1) threads.append(thread2) #等待所有线程完成 fortinthreads: t.join() #s=raw_input("Entersomething>>") #prints s=raw_input("Entersomething>>") exceptEOFError: print"\nWhydidyoudoanEOFonme" except: print'\nSomethingunexpectedoccurred.' print"Done." a=['apple','mango','carrot','banana'] b=a print"bis",b dela[0]#可变数据结构,两个list都跟着变 print">>\nais",a c=a[:]#采用切片操作符运用 print"cis",c delc[0] d={'jh':'jianhu','yc':'yancheng','js':'jiangsu',1:55} print">>>>>\ndis",d ax=d.copy() print"axis",ax fora,bind.items(): print'ais%s,bis%s'%(a,b) ax.clear() seq=('name','age','sex') value=('dahu',24,'male') dict=dict.fromkeys(seq) print"NewDictionary:%s"%str(dict)#这样输出形式也行 print"dis%s"%str(d) dc=dict.fromkeys(seq,1)#算是创建一个新的字典,设置每个初始值 #d=dict.fromkeys(seq,value)#不可以这样,交叉设置不行 print"NewDictionarydis:%s"%str(dc) print(d.has_key('jh'))#判断是否有键值 print(d.get('jh')) print(d.get('ycs','haha'))#返回指定键的值,如果值不在字典中,返回你设定的值。 print"<><>",d x=d.items()#返回一对键和值,一对作为一个tuple printx,type(x)#返回x为list,x[0]为tuple,所以上面的例子中x用作循环了 xplus=d.iteritems() printxplus,type(xplus) xp=list(xplus)#其实跟.items()方法区别不大 printxp,type(xp[0])#字典.iteritems()方法在需要迭代结果的时候使用最适合,而且它的工作效率非常的高。 k=d.keys() printk,type(k)#类型为list kplus=d.iterkeys() printkplus,type(kplus) kp=list(kplus) printkp,type(kp)#跟上面iteritems比较类似 #iterkeys返回一个迭代器,而keys返回一个list,表面上看没啥区别,前者不能直接print,而后者可以,在数据量比较大的时候,for循环里用迭代器的效率要比list大很多。 v=d.values()#返回value列表 printv,type(v) vplus=d.itervalues() printvplus,type(vplus) vp=list(vplus) printvp,type(vp)#同上类比 pp=d.pop('jh') print">>>>\nppis",pp pa=d.popitem() print"pais",pa,type(pa) deld['jh'] #clear()方法是用来清除字典中的所有数据 #pop()方法的作用是:删除指定给定键所对应的值,返回这个值并从字典中把它移除 #列表中pop()方法,要么删除最后一位,要么指定位置删除,这个不一样 #popitem随机返回并删除字典中的一对键和值,是tuple #也可以直接del某键,值也会一起删掉。 df=d.setdefault('sz','suzhou')#会实际添加进去,两个用法比较接近 df=d.setdefault('jh','beijing') gf=d.get("bj",'beijing');printgf#不会真的添加进去 beif={"gz":"guangzhou"};printbeif beif.update(d);printbeif#把里面的键、值对更新到第一个字典里 vi=d.viewvalues()#viewitems,viewkeys和viewvalues的用法,类型比较奇怪。 printvi,type(vi) print(len(vi)) #coing=utf-8 poem='''\ Programmingisfun Whentheworkisdone ifyouwannamakeyourworkalsofun: usePython! f=file('poem.txt','w') f.write(poem) f.close f=file('poem.txt','w+') #whileTrue: #line=f.readline() #iflen(line)==0: #break #printline,len(line) #print(f.readline()) #print(f.readlines()) f.seek(20,0) print'>>>',f.readline() printf.tell() #返回当前在文件中的位置,这个可以跟readline结合起来玩 #f.truncate(3)#存在则截断该字节数,不存在则从当前位置截断,之后所有字符都被删除 shoplist=['apple','mango','carrot','banana'] print">>>>>>\nIhave",len(shoplist),'itemstopurchase.' print"Theseitemsare", foriteminshoplist: printitem,#这边加,就表示连起来输出了 print'\nIalsohavetobuyrice.' shoplist.append('rice') print"Myshoppinglistisnow",shoplist print"Iwillsortmylistnow" shoplist.sort() print"Sortedshoppinglistis",shoplist print"ThefirstitemIwillbuyis",shoplist[0] olditem=shoplist[0] delshoplist[0] print"Iboughtthe",olditem print"Thisprogramisbeingrunbyitself." print'Iambengimportedfromanothermodule.' #$pythonusing_name.py #Thisprogramisbeingrunbyitself #$python #>>>importusing_name #Iambeingimportedfromanothermodule #>>> li=[1,2,3,4,5,6,7] printli[1:];printli[1:len(li)]#最后这个超过len(li)也行的 printli[:];printli[0:len(li):1]#其实索引、终止索引、步长 #len正好是统计了整个list的数量,正常计数呢又从0开始,少一位,很恰巧。 printli[::] printli[::-1]#逆序排布 print">>>>>" #实现让字符串倒叙打印 s='abcdefg' foriinrange(len(s)): prints[-i-1]#呵呵,自己写的 i=-1 print">>>>>"#每次都把最后一个字符砍掉 foriin[None]+range(-1,-len(s),-1):#倒序负数实现 prints[:i] print(len(s)) print(range(-1,-7,-1)) #---倒序正数实现 foriinrange(len(s),0,-1): s="abcdef" prints,type(s) print"xx"+s,"ac"ins b="xx"+s prints[-1]#有点像list里面的操作了 prints[0:len(s)] #----字母处理 print"\n>>>>" prints.upper()#全部大写 s=s.upper() prints.lower()#全部小写 prints.swapcase()#大小写互换 prints.title()#所有单词首字母大写,其余小写的 prints.capitalize()#首字母大写,其余小写 print'%sljust=%s'%(s,s.zfill(10)) #获取固定长度,右对齐,左边不够用空格补齐:str.ljust(width) #获取固定长度,左对齐,右边不够用空格补齐:str.rjust(width) #获取固定长度,中间对齐,两边不够用空格补齐:str.center(width) #获取固定长度,右对齐,左边不足用0补齐:str.zfill(width) s="afbcfbdesf" prints.find('f')#搜索指定字符串,没有返回-1 prints.find('f',2)#指定起始位置搜索 prints.find('f',2,7)#指定起始及结束位置搜索 prints.rfind('f',1,8)#从右边开始,用法一样的 prints.count('f')#搜索到多少个指定字符串 #index用法 prints.index('fb',0,8)#用法比较类似,查不到会返回异常 print(s.replace('fb','diao'))#全给替换了 print(s.replace('fb','diao',1))#替换指定次数的 #----字符串去空格及去指定字符 s='youHello,whereareyou' prints print(s.strip())#去两边空格 print(s.lstrip())#去左边空格 print(s.rstrip())#去右边空格 print(s.strip('you'))#去两边字符串,相应的也有lstrip,rstrip #-------split用法 s="afbcfbdesfa" print">>><<<\n" print(s.split('f'))#按指定字符分割字符串为数组 sa='abc\n\ndefg\rkl\r\n' print(sa.splitlines(True))#默认为False,不包含换行符,如果为True,则保留换行符。 print(s.startswith('afbc'))#是否以start开头 print(s.endswith('af'))#是否以end结尾 print(s.isalnum())#是否全为字母或数字 print(s.isalpha())#是否全字母 print(s.isdigit())#是否全数字 print(s.islower())#是否全小写 print(s.isupper())#是否全大写 str="thisis\tstringexample....wow!!!" print">>>\nOriginalstring:"+str print"Defualtexapandedtab:"+str.expandtabs() print"Doubleexapandedtab:"+str.expandtabs(12) b='**' print(b.join(s))#b加入到s里面,s在两端 s='Imissmissyou' print(s.partition('miss'))#返回一个3元的元组,第一个左边的,第二个为分隔符本身,第三个是右边的 print(s.rpartition('miss'))#右边开始找 #---------translate()的用法 fromstringimportmaketrans intab="aeiou" outtab="12345" trantab=maketrans(intab,outtab) str="thisisstringexample....wow!!!" printstr.translate(trantab) #>>>th3s3sstr3ng2x1mpl2....w4w!!!,握草,完全跟对应的替换了有木有! printstr.translate(trantab,'xm')#字符串中要过滤的字符列表。 xas='abzAZ' print(max(xas))#小写的大,z最大,A最小 zoo=('wolf','elephant','penguin') print">>>>>\nNumberofanimalsinthezoois",len(zoo) print"zoois",zoo new_zoo=('monkey','dolphin',zoo) print"newzoois",new_zoo print"Numberofanimalsinthenewzoois",len(new_zoo) print"Allanimalsinnewzooare",new_zoo print"Animalsbroughtfromoldzooare",new_zoo[2] print"Lastanimalbroughtfromoldzoois",new_zoo[2][2] #题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 count=0 foriinrange(1,5,1): forjinrange(1,5): forkinrange(1,5): if(i!=j)and(i!=k)and(j!=k): printi*100+j*10+k count+=1 print">>>totalis",count #题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? #程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 i=int(raw_input('净利润:')) arr=[1000000,600000,400000,200000,100000,0] rat=[0.01,0.015,0.03,0.05,0.075,0.1] r=0 foridxinrange(0,6): ifi>arr[idx]: r+=(i-arr[idx])*rat[idx] print(i-arr[idx])*rat[idx] i=arr[idx] printr #题目:一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少? #程序分析:在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: importmath #iftype(math.sqrt(i+100))=='int'andtype(math.sqrt(i+268))=='int': #printi #i+=1 x=int(math.sqrt(i+100)) y=int(math.sqrt(i+268)) if(x*x==i+100)and(y*y==i+268): printi i+=1 ifcount==3: #输入某年某月某日,判断这一天是这一年的第几天? year=int(raw_input('请输入年:')) month=int(raw_input('请输入月:')) day=int(raw_input('请输入日:'))#肯定要考虑闰年 ifyear%400==0: run=1 elifyear%4==0andyear%100!=0: run=0 #首先先判断是不是闰年 a=[31,28+run,31,30,31,30,31,31,30,31,30,31] days=0 foriinrange(len(a)): ifi+1 days+=a[i] days=days+day printdays #输入三个整数x,y,z,请把这三个数由小到大输出。 l=[] foriinrange(3): x=input("integeris:") l.append(x) l.sort() printl #多么完美的输出!beautiful! #题目:斐波那契数列。 #程序分析:斐波那契数列(Fibonaccisequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34 f=[] f.append(0) f.append(1) foriinrange(2,10): #f[i]=f[i-2]+f[i-1] f.append(f[i-2]+f[i-1]) printf[:] 有两个序列a,b,大小都为n,序列元素的值任意整形数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 #!/usr/bin/envpython a=[1000,999,998,997,996,995] b=[994,993,992,3,2,1] #a=[3,8,11] #b=[1,2,7] x=y=0 min=abs((sum(a))-(sum(b))) tag=1 #num=0 whiletag: old=min whilex whiley a[x],b[y]=b[y],a[x] #num=num+1 tmp=abs((sum(a))-(sum(b))) ifmin>tmp: min=tmp y=y+1 x=x+1 y=0 ifmin==old: tag=0 printmin #printnum #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? #defborn(pair,month=1): #x=[1,1] #ifmonth>=3: #y=pair*2 #-----打算用递归做,failed #count=0 #deftuzi(month): #ifmonth==1ormonth==2: #return1 #count+=1 #foriinrange(3,month+1): #return1+tuzi(month-2) #print(tuzi(8)) #-----answer f1=1 f2=1 foriinrange(1,21): print'%12ld%12ld'%(f1,f2), if(i%3)==0: f1=f1+f2 f2=f1+f2 #题目:判断101-200之间有多少个素数,并输出所有素数。 leap=1 foriinrange(2,20001): forxinrange(2,int(math.sqrt(i)+1)): ifi%x==0: leap=0#是偶数就确定为0 ifleap==1: printi, #题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。。 foriinrange(100,1000): x=i//100 y=i//10-10*x#这边采用取整的算法 z=i-100*x-10*y ifx**3+y**3+z**3==i: #题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 defreduceNum(n): print'{}='.format(n), ifnotisinstance(n,int)orn<=0: print'请输入一个正确的数字!' elifnin[1]: print'{}'.format(n) whilennotin[1]:#循环保证递归,除到最后n即为1,退出循环 forindexinxrange(2,n+1): ifn%index==0: n/=index#n等于n/index ifn==1: printindex else:#index一定是素数 print'{}*'.format(index), break#当找到一个因子后,跳出for循环,又从2开始找,所以永远是素数 reduceNum(input('Inputanumber:')) #题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 s=raw_input('Inutsomething:') char=0 space=0 digit=0 other=0 foriins: ifi.isalpha(): char+=1 elifi.isspace(): space+=1 elifi.isdigit(): digit+=1 other+=1 print'char=%d,space=%d,digit=%d,other=%d'%(char,space,digit,other) #题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 a=input('inputanumber:\n') b=input('inputcounts:\n') x=0#表示单个数字 foriinrange(1,b+1):#外循环计算各个数相加 forjinrange(i,0,-1):#内循环生成每个数 ifj==1: x+=a x+=a*10**(j-1) j-=1 y+=x x=0#这个数相加后清空,下个数重新生成 print'finalis',y #题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 s=0 forxinrange(2,13):#这个算的是各个质因子之和 n=x whilennotin[1]: #print'indexis',index s+=index print'boforebreaknis%d,sis%d,indexis%d'%(n,s,index) s=s+1 print'xis%d,sis%d'%(x,s) ifs==x: print'equal',s forxinrange(2,1000): a=[] forindexinxrange(1,x): ifx%index==0: a.append(index) #print"xis%d\n因子:%s"%(x,str(a)) ifx==sum(a):#数组里求和 print">>>>>>xis%d\n因子:%s"%(x,str(a)) #题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? #defball_fantan(h,count): #fantan=float(0) #fantan=h/(2**count) #returnfantan #s=float(0) #第k次反弹和第k+1次落地距离是一样的 #foriinrange(1,10): #s+=ball_fantan(100,i) #s=2*s+100 #print"共经过%d米,第10次反弹%d米"%(s,ball_fantan(100,10)) Sn=100.0 Hn=Sn/2 forninrange(2,11): Sn+=2*Hn Hn/=2 print'Totalofroadis%f'%Sn print'Thetenthis%fmeter'%Hn 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 程序分析:采取逆向思维的方法,从后往前推断。 程序源代码: x2=1 fordayinrange(9,0,-1): x1=(x2+1)*2 x2=x1 printx1 以上实例输出结果为: 1534 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 foriinrange(ord('x'),ord('z')+1): forjinrange(ord('x'),ord('z')+1): ifi!=j: forkinrange(ord('x'),ord('z')+1): if(i!=k)and(j!=k): if(i!=ord('x'))and(k!=ord('x'))and(k!=ord('z')): print'orderisa--%s\tb--%s\tc--%s'%(chr(i),chr(j),chr(k)) orderisa--zb--xc--y 题目:打印出如下图案(菱形): * *** ***** ******* 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 fromsysimportstdout foriinrange(4): forjinrange(2-i+1): stdout.write('') forkinrange(2*i+1): stdout.write('*') print forjinrange(i+1): forkinrange(4-2*i+1): 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 程序分析:请抓住分子与分母的变化规律。 方法一: a=2.0 b=1.0 forninrange(1,21): s+=a/b t=a a=a+b b=t 方法二: s=0.0 b,a=a,a+b 方法三: l.append(a/b) printreduce(lambdax,y:x+y,l) 32.6602607986 题目:求1+2!+3!+...+20!的和。 程序分析:此程序只是把累加变成了累乘。 n=0 t=1 t*=n s+=t print'1!+2!+3!+...+20!=%d'%s l=range(1,21) defop(x): r=1 foriinrange(1,x+1): r*=i returnr s=sum(map(op,l)) 1!+2!+3!+...+20!=2561327494111820313 题目:利用递归方法求5!。 程序分析:递归公式:fn=fn_1*4! deffact(j): sum=0 ifj==0: sum=1 sum=j*fact(j-1) returnsum print'%d!=%d'%(i,fact(i)) 0!=1 1!=1 2!=2 3!=6 4!=24 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。 程序分析:无。 defoutput(s,l): ifl==0: return print(s[l-1]) output(s,l-1) s=raw_input('Inputastring:') l=len(s) output(s,l) Inputastring:abcde e d c b a 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 defage(n): ifn==1:c=10 else:c=age(n-1)+2 returnc printage(5) 18 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 程序分析:学会分解出每一位数。 x=int(raw_input("请输入一个数:\n")) a=x/10000 b=x%10000/1000 c=x%1000/100 d=x%100/10 e=x%10 ifa!=0: print"5位数:",e,d,c,b,a elifb!=0: print"4位数:",e,d,c,b, elifc!=0: print"3位数:",e,d,c elifd!=0: print"2位数:",e,d print"1位数:",e 请输入一个数: 23459 5位数:95432 3472 4位数:2743 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 a=int(raw_input("请输入一个数字:\n")) x=str(a) flag=True foriinrange(len(x)/2): ifx[i]!=x[-i-1]: flag=False ifflag: print"%d是一个回文数!"%a print"%d不是一个回文数!"%a 请输入一个数字: 12321 12321是一个回文数! sqdEvens=[x**2forxinrange(8)ifnotx%2] 多么简洁的代码!获取偶数的平方! 开启服务 C:\mysql-5.0.45-win32\bin>mysqld–console 关闭服务: C:\mysql-5.0.45-win32\bin>mysqladmin-urootshutdown 连接到MySQL服务器:[mysql@db3~]$mysql-uroot–p CREATEDATABASEdbname 查看数据库 mysql>showdatabases; 选择数据库 USEdbname 查看test1数据库中创建的所有数据表:mysql>showtables; 删除数据库的语法很简单,如下所示:dropdatabasedbname; 数据库的名字不可以改 在数据库中创建一张表的基本语法如下:CREATETABLEtablename(column_name_1column_type_1constraints,column_name_2column_type_2constraints,……column_name_ncolumn_type_nconstraints) mysql>createtableemp(enamevarchar(10),hiredatedate,saldecimal(10,2),deptnoint(2)); 查看一下表的定义,可以使用如下命令:DESCtablename 为了查看更全面的表定义信息,可以使用如下命令实现:mysql>showcreatetableemp\G; 表的删除命令如下:DROPTABLEtablename ALTERTABLEtablenameMODIFY[COLUMN]column_definition[FIRST|AFTERcol_name] mysql>altertableempmodifyenamevarchar(20); ALTERTABLEtablenameADD[COLUMN]column_definition[FIRST|AFTERcol_name] altertableempaddcolumnageint(3); ALTERTABLEtablenameDROP[COLUMN]col_name mysql>altertableempdropcolumnage; ALTERTABLEtablenameCHANGE[COLUMN]old_col_namecolumn_definition[FIRST|AFTERcol_name] mysql>altertableempchangeageage1int(4); mysql>altertableempaddbirthdateafterename; ALTERTABLEtablenameRENAME[TO]new_tablename mysql>altertableemprenameemp1; DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。下面将依次对它们进行介绍。 INSERTINTOtablename(field1,field2,……fieldn)VALUES(value1,value2,……valuesn); mysql>insertintoemp(ename,hiredate,sal,deptno)values('zzx1','2000-01-01','2000',1); mysql>insertintoempvalues('lisa','2003-02-01','3000',2); 只对表中的ename和sal字段显式插入值:mysql>insertintoemp(ename,sal)values('dony',1000); insert语句还有一个很好的特性,可以一次性插入多条记录,语法如下:INSERTINTOtablename(field1,field2,……fieldn)VALUES(record1_value1,record1_value2,……record1_valuesn),(record2_value1,record2_value2,……record2_valuesn),……(recordn_value1,recordn_value2,……recordn_valuesn); mysql>insertintodeptvalues(5,'dept5'),(6,'dept6'); 通过update命令进行更改,语法如下:UPDATEtablenameSETfield1=value1,field2.=value2,……fieldn=valuen[WHERECONDITION]将表emp中ename为“lisa”的薪水(sal)从3000更改为4000:mysql>updateempsetsal=4000whereename='lisa'; update命令可以同时更新多个表中数据,语法如下:UPDATEt1,t2…tnsett1.field1=expr1,tn.fieldn=exprn[WHERECONDITION] mysql>updateempa,deptbseta.sal=a.sal*b.deptno,b.deptname=a.enamewhere a.deptno=b.deptno; 两个表的数据同时进行了更新。 注意:多表更新的语法更多地用在了根据一个表的字段,来动态的更新另外一个表的字段 如果记录不再需要,可以用delete命令进行删除,语法如下:DELETEFROMtablename[WHERECONDITION] 在emp中将ename为‘dony’的记录全部删除,命令如下:mysql>deletefromempwhereename='dony'; mysql>deletea,bfromempa,deptbwherea.deptno=b.deptnoanda.deptno=3; 注意:不管是单表还是多表,不加where条件将会把表的所有记录删除,所以操作时一定要小心。 SELECT*FROMtablename[WHERECONDITION] “*”表示要将所有的记录都选出来,也可以用逗号分割的所有字段来代替,例如,以下两个查询是等价的: mysql>selectename,hiredate,sal,deptnofromemp; 有时需要将表中的记录去掉重复后显示出来,可以用distinct关键字来实现:mysql>selectename,hiredate,sal,deptnofromemp; mysql>select*fromempwheredeptno=1; 上面的例子中,where后面的条件是一个字段的‘=’比较,除了‘=’外,还可以使用>、<、>=、<=、!=等比较运算符;多个条件之间还可以使用or、and等逻辑运算符进行多条件联合查询 用关键字ORDERBY来实现,语法如下:SELECT*FROMtablename[WHERECONDITION][ORDERBYfield1[DESC|ASC],field2[DESC|ASC],……fieldn[DESC|ASC]] DESC表示按照字段进行降序排列,ASC则表示升序排列,如果不写此关键字默认是升序排列。 对于排序后的记录,如果希望只显示一部分,而不是全部,这时,就可以使用LIMIT关键字来实现,LIMIT的语法如下:SELECT……[LIMIToffset_start,row_count] 显示emp表中按照sal排序后的前3条记录:mysql>select*fromemporderbysallimit3; 聚合操作的语法如下:SELECT[field1,field2,……fieldn]fun_nameFROMtablename[WHEREwhere_contition][GROUPBYfield1,field2,……fieldn[WITHROLLUP]][HAVING-where_contition] 统计人数大于1人的部门:mysql>selectdeptno,count(1)fromempgroupbydeptnohavingcount(1)>1; mysql>selectsum(sal),max(sal),min(sal)fromemp; 约束 主键约束 联合主键 已经存在数据,仍添加主键 删除主键 外键约束 A表和B表有同一列数据,A表设置成主键约束,B表才可以设置成外键约束