欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

某培训学员总结Python入门知识合集,厚着脸皮讨要过来分享了!

程序员文章站 2022-10-04 22:58:28
交流群:548377875 暑假没回家 ,一不小心培训了python,反正免费的不听白不听,总比呆在寝室无聊好的多,庆幸的是坚持下来了,现在回想起来虽然学习时间很短,但确实感触蛮大的,因此写这篇文章总结一下。第一节课就被授课者吓到了,python处理TB级的数据,是Hadoopj级别的,而拥有者能力 ......

某培训学员总结Python入门知识合集,厚着脸皮讨要过来分享了!

 

交流群:548377875

暑假没回家 ,一不小心培训了python,反正免费的不听白不听,总比呆在寝室无聊好的多,庆幸的是坚持下来了,现在回想起来虽然学习时间很短,但确实感触蛮大的,因此写这篇文章总结一下。第一节课就被授课者吓到了,python处理tb级的数据,是hadoopj级别的,而拥有者能力的语言只有r,ruby等少数语言,以后用几个库scipy,numpy,matplotlib,可以做数值计算等,matlab的绝大部分功能都可以用python写出来 ,与matlab相比,python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。能不能别再吓我的,我的小心脏受不了~~这里主要是以经典的python为例,即python2.x,另外听说eve主要是用python写的~~,不得不说有点难以置性。

首先接触python就被它的另类所吓到了,啥,简单粗暴没括号,吓死我了。那怎么玩啊,在python中没有分号,单引号和双引号是不区分的,不像c中单个字符用单引号,字符串用双引号。python的代码段是靠缩进来表示的,不能用大括号。通过四个空格符或一个tab键即可,不过在函数开头后应有冒号,来表示下面的代码是其内部的内容。其次有些条件语句中的括号是可以省略的,如: if a>b:(tab)...当然加了括号也正确。而且不用写main函数,也不用导入isotream或是stdio.h之类的库。

某培训学员总结Python入门知识合集,厚着脸皮讨要过来分享了!

 

python 简介

1.免费开源

2.简单易学

3.解释性语言,与c/c++等编译性语言不同

4. 可移植,这个估计是流行起来的很重要的一个因素吧。python的程序都可以无需任何修改地移植到现今主流的系统平台上。包括windows,linux,macintosh,solaris,os/2,android等等

5.同是支持面向对象和面向过程编程,类似c++。至于其面向对象的编程,python还有世界上最强大的类库。

6.嵌入性:可以作为脚本语言嵌入到其他程序中,比如c/c++

7.可扩展性:python开发周期短,由于python是基于c开发的,所以用c/c++来编写python的扩展,现在也有支持java实现的jpython。

8.丰富的类库:

9.内存管理器

这个特别棒,再也不用要先给变交流群:548377875量申请内存了,也不用想着用完后释放等等这些麻烦死了的东西。

10.python的应用有系统编程,图形处理,数字处理,文本处理,数据库编程,网络编程,web编程,多媒体应用,他们也用python写串口之类的。。

关于python版本的问题

我想很多人都会果断用最新的python3.4.1(写文章时是2014.7.31,估计几年后如果这篇文章有幸被别人看到,对方肯定会呵呵的),人都是这样,喜欢最新版本的。但是python3.x和python2.x不兼容,也就是说你写的交流群:548377875python3.x的程序不能在python2.x idel中运行,反过来也是如此。很多库不支持python3.0之后的版本,很多扩展库都没有,你还怎么快乐玩耍。。比如python语言web框架的django就不支持。再说了网上很多优秀代码都是用python2.x写的,优秀的代码直接拿过来用就可以了,你自己写的费事费时,还不一定好用。看到一本书上的建议:目前大多数的应用是python2.5/2.6居多。windows建议学2.6,linux就玩2.5,怪不得前几天有个人在群里说他还在用2.5,估计是玩linux的。在本人学习时,他们授课是用python2.7.8的,是python2.x的最新版本(此时python3.x的最新版本是python3.4.1)。还是那句话吧,python2和python3并不是100%不兼容,只不过语法上做了一些修缮,更加精炼罢了。会python2的人对python3是不感冒的。

下面是python的print问题:交流群:548377875

书上明明写的是print 'hello world',会出错,必须写成print ('hello world'),其实这就是版本问题,前一种是python2的语法,后一种是pyhton3的语法。书上大部分是python2,所以如果你用python3的话,很多资料的代码你都要进行改写,很是麻烦。

一些基本内容

1.round是四舍五入的函数,如round(-9.1)=-9,round(10.7)=11

2.赋值可以多个同时进行,如a,b=3,6,而且类似a<b<7,运行显示true。a<7<b,运行显示false。这一点与c不一样,由此可见python的人性化啊~ ~

3.浮点数转化成整数是直接截断,并非四舍五入

4.python的变量是不能指定其类型的,他是通过所附的值来决定的,故int a=4是错误的,而应该写成a = 4,此外,long型整数没有最大的长度,具体取决于你的机器配置,一般几百位的整数显示时会在后面加一个l来表示其为long型。

5.‘+’可实现数字的相加或是字符串或是列表的相加,特别方便。如>>>a=[1,'hello']+[2,'mike'],则a就成了[1,'hello',2,'mike']

6.用‘’来实现转义,方法同c

7.逗号可以使print(不是print,python中的输出函数是print)函数不换行的输出。如print a,b 这和c比起来不知简单多上倍啊,要是打印个列表,python直接一个print 就出来了。。。

8.*可以实现字符串或列表的重复

>>> a='hello'

>>> b=a*4

>>> b

'hellohellohellohello'

>>> list1=[1,'d']

>>> list2=list1*3

>>> list2

[1, 'd', 1, 'd', 1, 'd']

另外**是乘方,python还支持复数,如:1-2j

9.输入与输出,其中输入时通过input函数,例:str1=input('提示性语句') 此时str1的类型取决于输入类型。还有一个函数是raw_input,可以将输入以字符串的形式处理。

输出时可以直接在print后加变量名或表达式,

如: >>>print 'the area of the circle is",area,'sq cm'

the area of the circle is 80 sq cm

另外也可以用c语言的风格输出,不过有一点差异。

print 'the area of the circle is %f",area,'sq cm' %area (注意,最末尾的百分号前面只有一个空格,否则会出错),如果有多个参数则%(参1,参2,...)

10.通过range可以方便的实现一个特殊的整数列表

range(下限,上限,步长),左闭右开,同list的切片。

如:0~100 : range(0,101),或简写成range(101)

50~100的偶数: range(0,101,2)

在表示c/c++语言中常用的循环时,利用range可以很方便。

如:c/c++ for(int i =0;i<100;i++)

{

....

}

python for i in range(100):

...

这个i 是局部变量,进行range列表的迭代,可以实现 i 从0到99共100次循环。是不是感觉有点小震撼。。

11.一些循环操作:

break:跳出循环

continue:跳过后面的语句,跳回循环体的顶部

pass:啥都不做

另外:和c相比python中没有++,和- - ,else if用elif来代替,条件语句的()可以省略,条件后需有:。最后逻辑关系 &&用and,||用or , !用not 表示。

字符串操作

1.capitalize(),使字符串首字母大写

2.find(s,beg,end)beg和end之间首次出现参数s的索引

3.islower()和isupper() 测试所有字符是否均小/大写

4.replace(old,new) 将old替换成new

5.split() 将空格分隔的单词以列表形式返回,同理如果是split('a'),则会将字符串进行如下处理,每当碰到a字符则作为前一个字符串的结束,a字符相当于空格。

如: >>> colors='red orange green'

>>> colors.split(a)

['red or', 'nge green']

6.strip()是删除字符串中首尾的空格符

如: >>> a=' hello kitty '

>>> a.strip()

'hello kitty'

列表操作

1. 通过for i in list1:来对list1列表的元素进行迭代,赋值给i

2.如果要同时获取i的索引可以用enumerate函数

如:>>> list1=['jim','kitty',"tom"]

>>> for i,j in enumerate(list1):

print i,j

0 jim

1 kitty

2 tom

注意 i和j之间本来是有()的,原型为(i,j),这里省略了括号,所以i和j之间除了有逗号没有空格符

3.列表的一些操作:

切片:咋说呢,其实list和str都可以“切片”,简单地说str[1:-1]就是去掉字符串的第一个字母和最后一个字符。str[1:]就是去掉第一个字符。切片方式和list是一样一样的,都是左闭右开,支持负索引,从0开始。

list1=['a','b','c','d','e','f']

list2=list[0:4]

则list2为['a','b','c','d'] 区间是左闭右开的,即list2包括了list1[0]到list1[3]的所有元素

另两种特殊的简化形式

list2=list1[:4]等同于list2=list1[0:4] list2=list1[4:]等同于list2=list1[4:6]

此外python的列表还支持负数索引,

如>>> list2=list1[-3:-1]

>>> list2

['d', 'e'] 依旧是左闭右开

当想表示从倒数第三个到结束则可以用以下两种方式

>>> list4=list1[-3:6]

>>> list4

['d', 'e', 'f']

>>> list5=list1[-3:]

>>> list5['d', 'e', 'f']

其他情况则会返回空列表

4. 列表具有别名机制(相当于引用)

如:list1=[...]

list2=list1

当list1更改时,list2也会更改,而字符串不具有别名机制,故字符串的别名是很安全的。

5.常见列表方法

append(v):列表后追加v

insert(i,v): v插入索引i

remove(v): 移除第一次找到的v值

reverse(): 反转

sort(): 升序排列(字符串则以字母表顺序为准)

pop(): 移除最后一个元素并返回

注意:除了pop外,所有的方法都只会返回一个特殊值none,列表只有一个,所有的方法都只会修改原列表而不会创建新的列表

如:>>>ted_colors=colors.sort()

>>>print sorted_colors

none

6.列表中的元素可以是列表

>>>life=[['canada',76.5],['united states',75.5]]

>>>canada=life[0]

>>>canada[1]=80

>>>life

[['canada',80],['united states',75.5]]

这里的canada是别名,对其操作会影响到主列表life

7.上文知道了如何将字符串转化成列表了(别跟我说你已经忘了。。split 呗~~),那么如何将列表转化成字符串呢?用 join,字面意思就是将列表中的字符连接以来。那用什么连接呢?你可以用 ’,‘ ’%‘ 或是其他任何你喜欢的字符或字符串都可以。列表放在join后的括号中,那用于连接的字符或字符串怎么写呢?给个例子

如:>>> list1=['2','34','good','hi']

>>> ','.join(list1)

'2,34,good,hi'

这一点很特殊是用 字符(串).join(列表)

注意点:

1.如果要进行转换操作,则对类表的元素有要求,必须全部是 字符(串),否则会出错。

>>> list3=[2,34,'good','hi']

>>> ','.join(list3)

traceback (most recent call last):

file "<pyshell#6>", line 1, in <module>

','.join(list3)

typeerror: sequence item 0: expected string, int found

2.可以用其他连接的哦,如:

>>> list1=['2','34','good','hi']

>>> 'fool'.join(list1)

'2fool34foolgoodfoolhi'

8.特殊的列表:元组

元组是不可以直接更改的列表,其运行效率更高,元组用‘()’来表示

>>>life=(['canada',76.5],['united states',75.5])

实际上元组中的对象仍旧可以更改如:life[0][1]=80.0,但不可以更改life[0]。

文件操作

1.标准文件输入格式

如data.txt中的内容为:

mercury

venus

earth

data=open/file('data.txt','r')

for line in data:

print len(line)

为什么会长度多1呢?因为文件中读取的每一行末尾都有一个结束符,用string.strip(),即可去掉该空白字符。前面字符串的方法已介绍过该方法。

data=open/file('data.txt','r')

for line in data:

line=line.strip()

print len(line)

data.close()

当该表参数‘r’,改成‘w’是直接写如,而‘a’是追加

2.当要打开网站上的文件时需导入urllib模块,通过其中的urlopen函数打开目标网页,并返回一个对象,就像操作本地文件一样。

import urllib

url='...'

web_page=urlopen(url)

for i in web_page:

line=line.strip()

print line

web_page.close()

集合和字典

1.集合可以使用元组或是列表

set((2,3,5))等价于set((2,2,3,5,5)),等价于set([2,3,3,5]),简单的说集合只有一个元素,该元素是列表或是元组都可。

2.集合的操作

并(union),交(intersection),添加(add)和移除(remove),注意,只有add,remove和clear是修改当前集合,其余都会创建一个新的集合。

eg:ten=set(range(10)), lows=set([0,1,2,3,4]), odds=set([1,3,5,7,9])

_____________________________________________________________________________________________________________________________________lows.add(9) none

lows.clear() none

(由于add并不会创建一个新集合,故为none,要想得到预期的效果,则需>>>lows=set([0,1,2,3,4]) >>>lows.add(9) >>>lows)

lows.differece(odds) a

lows.intersection(odds) b

lows.issubset(ten) true 包含于

lows.issuperset(odds) false 包含

lows.symmetric_difference(odds)

a+c 对称差

lows.union(odds) a+b+c 并

另一种更简单的方法直接用数学符号表示即可

different set1-set2

intersection set1&set2

issubset set1<=set2

issuperset set1>=set2

symmetric_different set1^set2

union set1 |set2

字典

1.用‘{ }’表示字典,{字符串:值,...}

如:

>>>birds={‘canada goose’:3,‘northern fulmar’:1}

>>>birds[‘canada goose']

3

2.通过赋值来直接对字典进行扩展(若原字典中无该键)或修改键值(原字典中已有该键)

>>>birds={}

>>>birds['snow goose']=3

>>>birds

{'snow goose':3}

3.删除键

del birds['snow goose']

4.对字典的循环,返回的不是键值,而是键!这一点非常重要

for x in birds:

print x,birds[x]

-->'snow goose' 3

5.其他一些常用方法

get(key,value1): 注意,若dict中有key,则返回dict[key],否则返回value1

keys(): 以列表形式返回键

items(): 返回(key,value)列表

values(): 以列表形式返回键值

update(temp): temp字典对原字典进行更新

上诉方法其实一看名称也就明白用途了。。

6.字典的迭代

用iteritems函数

如:for (key,value) in dictionary.iteritems():

...

lambda表达式

这个特别有意思啊,当你写函数时经常会遇到,给个啥名字好呢?你感觉写一大堆单词上去总怕表达不精练什么的,有可能还会写错单词字母(啥,你英语水平很好,不可能写错。。好吧,我错了),而且只在局部用到,这时候用lambda函数太棒了。lambda函数是匿名函数,没有名字。

形式:>>>m=lambda a,b:a+b

>>>m(5,4)

9

lambda 参1,参2,...:表达式 (注意缩进,否则会出现unexcepted error)

几个特殊的函数

1.filter(函数,可迭代对象如列表等),他是个过滤器,列表中的符合函数规则的元素过滤出来,以列表形式返回。

如:def mod1 (a):

return (a%2==0)

list2=filter(mod1,range(1,10))

print list2

--> [2, 4, 6, 8]

2.map(函数,可迭代对象如列表等),其的作用是对整个列表的元素进行检查是否满足函数,并且以列表形式返回true或false

如 def mod1 (a):

return (a%2==0)

list3=map(mod1,range(1,10))

print list3

[false, true, false, true, false, true, false, true, false]

3.reduce(函数,可迭代对象如列表等),其可以实现连续处理功能。其作用是先把列表中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。

话不多说,给个例子吧

计算1+2+3+...+100

python里就一句话

a=reduce((lambda x, y:x+y),range(1,101))

print a

-->5050 (好吧,我错了,写了两句。。)

首先将range(1,101)即列表(1,2,...,100)的第一个元素1,和第二个元素2,拿出来进行+运算,再把返回值3和列表中的第三个元素3相加,然后把返回值6再与列表中第四个元素4相加。。如此不断下去,直至全部加完为止。如果用c的话,大概要十行吧。。

将上诉例子的+换成*就可以计算100!,very easy吧。可以试试计算10000!来测试你的机器性能啊,我的机器只能算到1w!了,10w!等几分钟都不会出结果。。

这里有一个求素数的代码,如果是c/c++的话,起码二十行吧,这里也是一行

0~100的素数代码:

print [x for x in range(1,101) if not [y for y in range(2,x/2+1)if x%y==0]]

异常

1.try和except

类似if和else,如果未发生错误,先执行完try块中的代码,并完全跳过except,若发生错误,则跳到except块开始执行代码,称为“异常被捕获了”。注意:try代码块只执行到第一句发生错误的代码

try:

①x=1/0.3

②print 'reciprocal of 0.3 is',x

③x=1/0.0

④print 'receprocal of 0.0 is',x

except:

⑤print 'error: no reciprocal'

⑥ ...

执行顺序:①②③⑤⑥

在try/except后可添加else块,来告诉python在无异常时发生的事。

注意:只有try中所有代码被正确执行,才会执行else块中的代码。

2.异常对象

python在引发一个异常后,会创建一个用于存放错误信息的对象,可以在except中指定具体的异常

values=[-1,0,1]

for i in range(4):

try:

r=1.0/values[i]

print 'reciprocal of',values[i],'at',i,'is',r

except indexerror:

print ’index',i,'out of range'

except arithmeticerror:

print 'unable to calculate reciprocal of',values[i]

如果要知道具体的异常,可以把异常赋给变量

except indexerror,e:

print 'error:',e

3.自己引发异常,通过raise

def divide(top,butttom):

if buttom==0:

raise valueerror('divisor is zero')

else:

return top/bottom

for i in range(-1,2):

try:

print divide(1,i)

except valueerror,e:

print 'caught except for',i

面向对象编程oop

1.类中的方法至少有一个参数self,函数前都有def,没有返回值类型,这一点太棒了,直接在末尾return 任何东西都可以,返回字符串啊,甚至是列表,还可以是一句话。。如果在c/c++中那肯定要跪,你肯定要写很多其他的东西才能实现该功能。

一些内置函数:

def __init__(self,a,b,c):

self.a=a

self.b=b

self.c=c

因为python会自动将对象本身的引用当做参数传给方法的第一个参数,类似的还有

def __str__(self):

return '...' (此函数是类中的输出函数,最好用return把。。)

实例化直接传参就可以了

如:time1=time(10,2,45)

2.运算法重载

python中的运算符重载比c++中简单多了。。直接在类中传递一个self,还有另一个参数即可。适用于单目和双目运算符的重载

例如重载实例:

def __add__(self,other): #reload std return "%s : %s : %s" %(self.hour +other.hour,self.minute+other.minute,self.second+other.second)

def __lt__(self,other): # "<" pass

def __call__(self,index): # __builtin__ "()" reload

if (index=="hour"):

print "~~"

else:

print ".."

def __getitem__(self,index): #__builtin__ "[]" reload return index *2

注意重载的运算法只能在类的实例中使用

3.类的继承

class people:

def __init__(self,num,name): #成员变量初始化函数

self.num=num

self.name=name

...

class teacher(people):

def __init__(self,num,name,colledge):

people.__init__(self,num,name)

self.college=college 只有在很复杂的情况下才会用到私有继承,默认是共有继承,直接把父类放入括号中,若有多个父类,用逗号隔开

gui图形用户界面

1. 利用 tkinter 模块

from tkinter import *

import tkinter as tk (这样写后面的tkinter就可以用tk替代)

import sys (用于导入退出程序的函数等,如sys.exit())

一些插件:

button,canvas,checkbutton(复选框),radiobutton(单选框),entry(单行文本框),text(多行文本框) label(显示文本的单个行),listbox(下拉列表),menu(下拉菜单),message(显示文本多个行)

======================================================================================================================== label

label是最简单的插件,显示一小条文本,需置入父插件中

from tkinter import *

window=tk()

label=label(window,text='hello').pack()

首先得先制造处窗口,通过tk.tk()即可,然后所有的子插件都嵌套在window中。对window这个窗口可以进行设置,通过

window.geometry("300x400+120+100") #windows' scale and its positionwindow.title("this is just a window...")

注意geometry内是字符串,第一个是length,第二个是width,之间用x(不是乘号,而是字母x),接下来第三第四个是窗口左上角的位置坐标,用加号连接。

2.要注意插件的配置一旦确立,若要更改则需用config方法修改插件的很多属性

这里有一个动态显示label文本的方法

...

import time

...

label=lable(window,text='hello')

time.sleep(2)

label.config(text='kitty')

3.要让插件的值发生变化,可以用可变类型来实现

共有四种:intvar(),stringvar(),booleanvar(),doublevar()

可变类型的值是通过set和get方法来设置和获取的。

from tkinter import *

window=tk()

data=stringvar()

data.set('data to display') #设置初始值

label=label(window,textvariable=data).pack()

window.mainloop()

4.上面的是把插件直接一股脑的丢进window一个窗口上,为了更好的安排插件的位置,可以利用frame(框架)来将一些插件置于frame内,其实就是在窗口画出一个框来。

显然,将插件置于frame框中只需将window改成frame即可

如:frame=frame(window).pack()

first=label(frame,text='first label').pack()

有时候第一个说明父插件的参数可以省略。默认是window

5.可以将frame修改参数让其可见,修改boardwidth(默认为0)值即可。同时可以更改样式relief,改成‘ sunken’,‘raised’,‘groove’等,这些属性在其他的一些插件如entry,text中也有。

6.一些其他的样式处理

eg:

label=label(window,text="hello",bg='green',fg='white',font=('curier',14,'bold italic').pack()

bg是background,设置背景颜色,fg是fontground ??设置字体颜色。bold是粗体,对应的normal是细,italic是斜体,roman是不倾斜的。

7.插件的布局

可以看到所有的插件都会有.pack(),当然window就没有了。pack函数是将子插件置入父插件中,父插件是传入的第一个参数,pack内可传入side=‘left’等参数,从而确定该插件的具体安放位置。

另一中方法是grid(row=100,column=100),用于确定具体的网格以便与安放插件。

但两种方法不可以混用。

8.函数:更好的实现交互

为了实现某些插件(如按钮等)的功能,需要用到函数 .(...,command=函数名)即可。注意:等号后面的函数是不允许带参数的,目的是以同一种方式调用他们。

如:

from tkinter import *

window = tk()

counter=intvar()

counter.set(0) #设置计数器初值

def click(var,value):

var.set(var.get()+value)

frame=frame(window)

frame.pack()

button1=button(frame,text="up",command=lambda:click(counter,1)).pack()

button1=button(frame,text="down",command=lambda:click(counter,-1)).pack()

label=label(frame,textvariable=counter).pack()

window.mainloop()

上面的代码功能:通过点击“up”和“down”两个按钮来实现对计数器counter的加1或减1操作,并将counter的值传给lable的textvariable,从而在label中显示。

在 click函数中,有两个参数,其中形参var会由实参intvar型的counter代替,value则会被1或-1代替。

在前面说过command后面的函数是不带参数的,故这里用lambda函数,否则你就要写连个command=clickup,command=clickdown。lambda函数是没有名字的函数,常用于定义动作,可以避免全局变量的使用。

9.其他一些插件

① text

text=text(frame,heigth=10,width=10).pack()

text插件还有很多其他的方法,这里略去

②checkbutton

checkbutton=checkbutto(frame,text='...',variable=...).pack()

③ radiobutton

radiobutton(root, text = j, value = i,variable = food).pack()

④scale 进度条

scale = scale(root , from_= 1, to = 20 ,resolution = 1 ,orient='horizontal',variable = speed)

scale.pack(side = "left")

注意:scale插件中是 from_=下限,to=上限,resolution是精度,orient 来定义横放竖放,默认是竖放。

⑤ tkmessagebox

这是弹出一个新的对话框,前面需有import tkmessagebox

tkmessagebox.askquestion("who is naruto?"," a main role in a famous cantoon",icon = "warning")

最后附上自己写的第一个gui程序源码,第一次写,虽然很挫,功能很少,有很多界面上的功能都是骗人的。。但还是不加修改的直接拿上来了,权当纪念一下我的8天python之旅吧。。

# -*- coding:utf-8 -*-

import tkinter as tk

from tkinter import *

import sys

某培训学员总结Python入门知识合集,厚着脸皮讨要过来分享了!

 

import tkmessagebox

root=tk.tk()

root.geometry('300x440+200+330')

root.title("your favorite person")

_namenum=intvar()

wordsac = stringvar()

points=stringvar()

wordsinput=stringvar()

def _choosebox():

tkmessagebox.askquestion(" ","you should click ok not this button...",icon="warning")

print _namenum.get()

def _wordafterchoosing():

tkmessagebox.askquestion("your choose",'waw,i like the role too!',icon="warning") #第一行是标签,第二行是输出

def authordisplay():

tkmessagebox.askquestion("your choose",'yan chuan',icon="warning")

def advice():

tkmessagebox.askquestion("advice",'your advice have already sent to the author haha, i lied to you!',icon="warning")

def points():

print points.get()

def textbox():

print wordsinput.get()

tk.label(fg='purple',text='who is your favorite?').pack()

tk.button(fg='blue', text='please choose yours',command=_choosebox).pack()

namelist=['naruto','sasuke','sakura','haku ','tsunade','gaara ','itachi ','others']

for i ,j in enumerate(namelist):

tk.radiobutton(root,fg='blue',text=j,value=i,variable=_namenum).pack()

tk.button(fg='red',text='ok',command=_wordafterchoosing).pack()

tk.button(fg='red',text='author',command=authordisplay).pack(side='left')

tk.button(fg='blue',text='advice',command=advice).pack(side='left')

tk.label(fg='red',text="please give a point for the software").pack()

scale=scale(root,from_=1,to=5,resolution=1,orient='horizontal',variable=points).pack()

tk.entry(relief="sunken",textvariable=wordsinput).pack()

button(fg="blue",text="submit",command=textbox).pack()

tk.button(fg="red",text='exit',command=sys.exit).pack()

tk.mainloop

最后如果发现错误,还请大家提一下,毕竟水平有限。对了,忘记说了,电脑同时可以安装python2和python3的。。。你可以两个同时玩。。