Python中字典的操作

如果你想在游戏中“畅通无阻”时,你可以从Python游戏开始,学习Python游戏的实际应用技术,如果你对其右兴趣的话,你就可以浏览我们以下的文章,希望你会有所收获,以下是文章的详细介绍。

一.前言
最近在优化项目前端,老板非想要一个时间范围的选择,觉得用两个时间输入框操作不便。看到网上有三种:分别是mobiscroll,用于手机端;jquery下的插件
Date Range Picker;基于bootstrap的daterangepicker。看了下官方文档,Date
Range
Picker和daterangepicker样子差不多。想着项目大体用的bootstrap,那就用daterangepicker吧。结果发现好多操作不便的小问题(不知道是不是我操作方式奇葩。。。)。善始善终,那就改源码吧。
二、小bug修复
1.输入框默认值为当前时间,可我们要自己的提示咋办,”autoUpdateInput”:false可以做到,但是,它居然让输入框一直都没值,这就不好了。百度了下,机智的网友给出了解决方案,在某些地方,设置autoUpdateInput为true。
a. clickRange方法修改成如下:
} else if (!this.endDate && date.isBefore(this.startDate)) {
this.autoUpdateInput = true;
//special case: clicking the same date for start/end,
//but the time of the end date is before the start date
this.setEndDate(this.startDate.clone());
} else { // picking end
this.autoUpdateInput = true;
var dates = this.ranges[label];
this.startDate = dates[0];
this.endDate = dates[1];

Python3中关于文件的操作,

1.file.open(”test.txt”,”r+”,encoding=”’UTF-8′)       
 以r+方式打开一个文件test.txt,编码类型UTF-8

2.file.close()   关闭文件

3.file.write(str)   写入文件,这里写入的类型为str

4.flie.readline()    读取整行,包括\n符号

文件读取方式:

r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

写的一个注册用户名和密码,并把这些信息保存在文件中的函数:

def regedit():
    print('注册信息')
    username = str(input('请输入用户名:'))
    password = str(input('请输入密  码:'))
    use_psd = open('use_psd.txt','r+',encoding='utf-8')
    while 1:
        line = use_psd.readline()
        if username in line:
            print('此账号已经被注册!')
        else:
            use_psd.write(username+',')
            use_psd.write(password+';')
            print('恭喜你,注册成功!')
        break
    use_psd.close()

1.file.open(”test.txt”,”r+”,encoding=”’UTF-8′)
以r+方式打开一个文件test.txt,编码类型UTF-8 2.file.close() 关闭文件
3.file….

字典的基本详情

  • 字典查找速度快
  • 字典是无序的;(python3.6以上版本有序)
  • 字典支持乘加、成员检查、长度、最小值、最大值、嵌套;
  • 字典值不支持列表、元组、索引、切片、元素赋值跟切片赋值;
  • 威尼斯网址开户网站,字典通过大括号表示;
  • 字典的内容是项;项由键和值组成,中间用冒号隔开;项和项之间用逗号隔开;需要注意键必须是唯一的;
  • 字典的意义是让用户能够快速的找到特定的单词,以获悉其定义;
  • 字典通过键来进行查看值的内容
  • 字典的值可以是字符串、数字、字典

微信公众号:软测小生 ruancexiaosheng

Python中除法有两种运算符:’/’和’//’;有三种类型的除法:传统除法、Floor除法和真除法。

X / Y类型:

在Python2.6或者之前,这个操作对于整数运算会省去小数部分,而对于浮点数运算会保持小数部分;在Python3.0中变成真除法(无论任何类型都会保持小数部分,即使整除也会表示为浮点数形式)。

示例代码:
>>>3//2
1
>>>3//2.0
1.0
>>>4//2
2
>>>4//2.0
2.0

Python 3.4版本中结果:

>>>3/2
1.5
>>>3/2.0
1.5
>>>4/2
2.0
>>>4/2.0
2.0

X // Y 类型

Floor除法:在Python
2.2中新增的操作,在Python2.6和Python3.0中均能使用,这个操作不考虑操作对象的类型,总是省略小数部分,剩下最小的能整除的整数部分。

示例代码:

Python 2.7版本中结果:
>>>3//2
1
>>>3//2.0
1.0
>>>4//2
2
>>>4//2.0
2.0

Python 3.4版本中结果(与2.7版本一样):

>>>3//2
1
>>>3//2.0
1.0
>>>4//2
2
>>>4//2.0
2.0

这是一个晴朗的星期六下午, 你悠闲地在网上浏览.
忽然间你看到一个留言板上的小游戏. 它很简单,问题是: 把五个数字 56789,
放到 {{{[][][] * [][], 令结果最大.。

            if (!this.timePicker) {
                this.startDate.startOf('day');
                this.endDate.endOf('day');
            }

            if (!this.alwaysShowCalendars)
                this.hideCalendars();
            this.clickApply();
        }
b.clickDate方法中增加
  } else if (!this.endDate && date.isBefore(this.startDate)) {
            this.autoUpdateInput = true;
            //special case: clicking the same date for start/end,
            //but the time of the end date is before the start date
            this.setEndDate(this.startDate.clone());
        } else { // picking end
            this.autoUpdateInput = true;

字典的赋值

dict1 = {'key1':'value1', 'key2':'value2'}

概括来讲:

在Python
2.6中,’/’执行传统除法,如果操作数都是整数的话,执行截断的整数除法(即对于结果只保留整数部分),否则,执行浮点除法(保留余数);’//’执行Floor除法,与Python3.0一样,对于整数执行截断除法,浮点数执行浮点除法。

在Python
3.0中,’/’总是执行真除法,不管操作数的类型,都会返回包含任何余数的浮点结果;’//’执行Floor除法,截除掉余数并且针对整数操作数返回一个整数,如果有任何一个操作数是浮点数,则返回一个浮点数。

补充:

Floor除法:效果等同于math模块中的floor函数:

math.floor(x) :返回不大于x的整数

所以当运算数是负数时:结果会向下取整。

>>>5//3#1.6666666666666667
1
>>>-5//3
-2
>>>

与floor()函数类似的还有很多,比如trunc()函数

>>>importmath
>>>math.trunc(-1.6)
-1
>>>math.trunc(1.6)
1

#参考justforuse
CSDN#

你最先对自己说: “这有什么难, 把最大的放到最大位数那里就行了.”
你再心算了一下, 也许不对. 每个结果要看其他位置上放了什么数才行.
你开始觉得有些兴趣了, 反正你正在学一种好玩的编程语言, 何不练习一下呢?

2.打开日期控件后,点击外边空白处以及选了时间,但是没有点“确定”而是点”取消“后,时间控件输入框会写入时间。
a.clickCancel方法注释掉this.hide(),改成以下代码:
if (this.isShowing){
$(document).off(‘.daterangepicker’);
$(window).off(‘.daterangepicker’);
this.container.hide();
this.element.trigger(‘hide.daterangepicker’, this);
this.isShowing = false;
}
b.outsideClick方法中也像上面那样将this.hide()改掉
c.show方法中,改成如下,注释掉的为原来的,下面是新增的
// this.oldStartDate = this.startDate.clone();
// this.oldEndDate = this.endDate.clone();
// this.previousRightTime = this.endDate.clone();

字典的添加

dic1 = {'name': 'liangxiao', 'age': 24}dic1.setdefault('work', 'IT')            # 原有key存在值,则不操作dic1 = {'name': 'liangxiao', 'age': 24}dic1['work'] = 'IT'                      # 原有key存在值,则覆盖

於是你开出你心爱的 Python游戏, 开始思考: “其实我要的是一个程式,
我给它各种数字的组合, 然后它自动帮我找出最大的一个. 如果我传入 1,1,1,1,1
和 1,1,1,1,2, 它会知道要算 111 * 11 和 111 * 12, 求出较大的是 111 *
12 并输出这个组合以及其乘积. 这个程式并不难嘛.”

        this.oldStartDate = this.startDate;
        this.oldEndDate = this.endDate;
        this.previousRightTime = this.endDate;

字典的更新

dic1 = {'name': 'liangxiao'}dic2 = {'age': 18}dic2.update                # 将dic1里面的内容更新到dic2里面

dic1 = {'name': 'liangxiao', 'age': 24}dic1['name'] = 'LIANGXIAO'            # 更新value的内容
1 # calc.py  2 def calc(seq):  3 maximum = 0 4 max_item = []  5 for i in seq:  6 product = (i[0]*100 + i[1]*10 + i[2]) * (i[3]*10 + i[4])  7 if product > maximum:  8 maximum = product 9 max_item = i  10 elif product == maximum:  11 max_item += ','+i  12 return max_item, maximum  13   14 seq = [ [5,6,7,8,9], [5,6,7,9,8] ]  15 max_item, maximum = calc(seq)  16 print "Maximum at", max_item, ",product", maximum  

3.鼠标移到日期选择的某个日期时,上面对应的输入框的值也会跟着一直变化,但是当我选择了两个日期后,鼠标再移在上面,还变化就不好了,让我以为上面开始时间和结束时间输入框数据出了问题,所以一气之下,去掉了这个特性。
hoverDate方法中,将下面两行注释掉(以下代码我注释的部分就是):
if (this.endDate &&
!this.container.find(‘input[name=daterangepicker_start]’).is(“:focus”))
{
//
this.container.find(‘input[name=daterangepicker_start]’).val(date.format(this.locale.format));
} else if (!this.endDate &&
!this.container.find(‘input[name=daterangepicker_end]’).is(“:focus”))
{
//
this.container.find(‘input[name=daterangepicker_end]’).val(date.format(this.locale.format));
}

字典的删除

dic1 = {'name': 'liangxiao', 'age': 24}dic1.pop('name')            # 根据key进行键值对删除,可设置返回值,没有找到相应的key默认会报错dic1 = {'name': 'liangxiao', 'age': 24}del dic1                    # 删除字典dic1 = {'name': 'liangxiao', 'age': 24}dic1.clear()                # 清空字典dic1 = {'name': 'liangxiao', 'age': 24}dic1.popitem()              # 随机删除任意一个键值对

你试了一下,

通过列表转换字典

items = [('name', 'xiao'), ('age', 25)]Dict_ = dict
$python calc.py   Maximum at [5, 6, 7, 9, 8] ,product 90160    

字典的查看

dic1.values()        # 查看所有的valuedic1.keys()         # 查看所有的keyprint              # 打印字典所有dic1.get('name')         # 查找指定的key的value,没有则返回Nonedic1.items()             # 一组一组的查找所有内容

没问题. 现在你只要给出所有的排列即可. 你打了几行, 觉得 [5,6,8,7,9]
这样打太辛苦了, 而且用 i[0]*100 + i[1]*10 … 的方法好像太难看了,
因此你有必要做一次修改. 好, 用字串吧. “56789”, 这样输入时较方便, 而且
int(“567”) * int(“89”) 要好看得多, 也应该快些. 另外你也把程式改得更短,
看起来像是个有经验的人所写. 以上的文章就是对Python游戏的部分介绍。

相关文章