Python入门

rt

lz是从java转型到Python的,这里就把前面一些东西小结一下了。

在windows下,大家平时都是用IDLE进行开发的,lz也就用这个来讲了。

 

配置环境什么的都很简单,大家直接度娘就ok了。

下面主要说一下在具体编写的时候遇到的问题。

顺便吐槽一下,真的,可以提交python的oj太少了,国内大部分ok或许都没有吧,大概看了几个常用的也就codeforces可以,lz刷的毕竟比较少啊。最近因为看到貌似很多人都在耍LeerCode上面的题目,目测了几道,感觉难度不大,倒可以顺便用这个练练python。

 

一、输入输出

这个要先提一下。做oj最头疼的是这个了。试了一下,感觉和java比起来好像不是那么的友好。估计以后做oj的日子会很苦。

我安装的是python 3.X,而不是python 2.X。细心的朋友会发现中间有很多变化。先提个最常见的变化,输入的变化:

python 2.X的input()和python3.X的eval(input())功能相同:将你所输入的东西看做程序代码,你输什么它就返回什么,所以你要输入字符串就要自己加引号,不加引号则是变量,所以有时候会出现类似未定义的错误信息。

python 2.X的raw_input()和python 3.X的input()功能相同:将你输入的东西看做一个字符串,其返回值是在你所输入的东西外边加上引号的字符串。

 

二、构造函数

很奇怪的一点,在Python当中,所有的函数,包括构造函数,都必须加上一个self参数,其实不一定要叫self,只不过默认了。

那么下面问题来了,因为还有默认参数的问题

代码:

class Person:

    def __init__(self):

        self.name 'Jack0'

        self.age 0

        

    def __init__ (self, 1000):

        self.name 'Jack3'

        self.age a

    

    def __str__(self):

        return "Person (%s,%s)" (self.name,self.age)

    

    def __repr__(self):

        return str(self)

结果:

>>> Person()

>>> p

Person (Jack3,1000)

>>> 

 

 

很容易进行一种猜测:参数多的把参数少的覆盖了

继续代码:

    def __init__(self):

        self.name 'Jack0'

        self.age 0

 

    def __init__(self, 'Jack1'):

        self.name n

        self.age 10

        

    def __init__ (self, 1000):

        self.name 'Jack3'

        self.age a

结果:

>>> Person()

>>> p

Person (Jack3,1000)

>>> 

 

继续实验,代码:

 

结果:

    def __init__(self):

        self.name 'Jack0'

        self.age 0

 

    def __init__(self, 'Jack1'):

        self.name n

        self.age 10

结果:

>>> Person()

>>> p

Person (Jack1,10)

>>> 

 

看来默认参数多的把参数少的覆盖了很对啊……那么问题来了,都只是一个默认参数怎么办?

代码:

    def __init__(self):

        self.name 'Jack0'

        self.age 0

 

    def __init__(self, 'Jack1'):

        self.name n

        self.age 10

 

    def __init__(self, 'Jack2', 100):

        self.name n

        self.age a

结果:

>>> Person()

>>> p

Person (Jack2,100)

>>> 

 

这个的结果感觉和位置有关系?那么再把两个倒过来一下试试,代码:

    def __init__(self):

        self.name 'Jack0'

        self.age 0

 

    def __init__(self, 'Jack2', 100):

        self.name n

        self.age a

        

    def __init__(self, 'Jack1'):

        self.name n

        self.age 10

结果:

>>> Person()

>>> p

Person (Jack1,10)

>>> 

 

好像不是和默认参数的数目有关系,而是和构造函数的位置相关。小伙伴惊呆了!最后的实验

代码:

   def __init__(self, 'Jack2', 100):

        self.name n

        self.age a

        

    def __init__(self, 'Jack1'):

        self.name n

        self.age 10

 

    def __init__ (self, 1000):

        self.name 'Jack3'

        self.age a

 

    def __init__(self):

        self.name 'Jack0'

        self.age 0

结果:

>>> Person()

>>> p

Person (Jack0,0)

>>> 

 

总结:

和小伙伴彻底惊呆的结果。原来这个Python的编译竟然是和位置紧紧相关的……不过考虑到Python竟然是一个通过缩进来进行编译区分的语言……可以理解

Anyway,小伙伴在进行code的过程当中,一定要记得空行。刚刚不知道因为什么原因,出现了这个错误,IndentationError:unindent does not match any outer indentation level,后来重新排版一遍就好了。

 

三、字典、集合

这里用了codeforces 394A来说明一下字典。集合和字典有很多类似的,具体可以dir(set)查看。

hometeam input()

awayteam input()

int(input())

homeDict {}

awayDict {}

 

for in range(n):

    str input().split(' ')

    int(str[0])

    team str[1]

    dict homeDict if team=='h' else awayDict

    int(str[2])

    color if str[3]=='y' else 2

    card dict.get(m) if in dict else 0

    if (card == or (card color ==2)):

        dict.update({m:3})

        print('%s %d %d' %(hometeam if str[1]=='h' else awayteam,m,t))

    elif(card==0):

        dict.update({m:1})

 

 

            #del dict[m]

            #dict.pop(m)

            

            #dict.update({m:1})    强制更新

            #dict.setdefault(m,1)    有的话就不修改了


 

 

基本部分就只做着一些说明了,还有类似property的东西到后面做项目的时候再详解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值