笨方法学python, Lesson 38, 39

Exercises 38

代码

ten_things = "Apples Oranges Crows Telephone Light Sugar"

print "Wait there are not 10 things in that list. Let‘s fix that."

stuff = ten_things.split(‘ ‘)
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]

while len(stuff) != 10:
	next_one = more_stuff.pop()
	print "Adding: ", next_one
	stuff.append(next_one)
	print "There are %d items now." % len(stuff)

print "There we go: ", stuff 

print "Let‘s do some things with stuff."

print stuff[1]
print stuff[-1] # whoa! fancy
print stuff.pop()
print ‘ ‘.join(stuff) # what? cool!
print ‘#‘.join(stuff[3:5]) # super stellar!

输出

Notes:

①split()函数、join()函数的应用

②列表的切片操作

Exercise 39

代码

输出

hashmap.py  字典的原理解读

def new(num_buckets=256):
	‘‘‘Initializes a Map with the given numbers of buckets.‘‘‘
	aMap = []
	for i in range(0, num_buckets):
		aMap.append([])
	return aMap

def hash_key(aMap,key):
	‘‘‘Given a key this will create a number and then convert it to
	an index for the aMap‘s buckets.‘‘‘
	return hash(key) % len(aMap)

def get_bucket(aMap, key):
	‘‘‘Given a key, find the bucket where it would go.‘‘‘
	bucket_id = hash_key(aMap, key)
	return aMap[bucket_id]

def get_slot(aMap, key, default=None):
	‘‘‘
	Returns the index, key, and value of a slot found in a bucket.
	Returns -1, key, and default (None if not set) when not foune.
	‘‘‘
	bucket = get_bucket(aMap, key)

	for i, kv in enumerate(bucket):
		k, v = kv 
		if key == k:
			return i, k, v 
	return -1, key, default 

def get(aMap, key, default=None):
	‘‘‘Gets the value in a bucket for the given key, or the default‘‘‘
	i, k, v = get_slot(aMap, key, default = default)
	return v 

def set(aMap, key, value):
	‘‘‘Sets the key to the Value, replacing any existing value.‘‘‘
	bucket = get_bucket(aMap. key)
	i, k, v = get_slot(aMap, key)

	if i >= 0:
		# the key exits, replace it 
		bucket[i] = (key, value)
	else:
		# the key does not, append to create it.
		bucket.append(key,value)

def delete(aMap, key):
	‘‘‘Deletes the given key from the Map.‘‘‘
	bucket = get_bucket(aMap, key)

	for i in xrange(len(bucket)):
		k, v = bucket[i]
		if key == k:
			del bucket[i]
			break 

def list(aMap):
    ‘‘‘Prints out what‘s in the Map.‘‘‘
    for bucket in aMap:
        if bucket:
            for k, v in bucket:
                print k, v 
                
                	

附加代码/小实验  ex39_test.py

import hashmap

# create a mapping of state to abbreviation
states = hashmap.new()
hashmap.set(states, ‘Oregon‘, ‘OR‘)
hashmap.set(states, "Florida", ‘FL‘)
hashmap.set(states, ‘California‘, ‘CA‘)
hashmap.set(states, ‘New York‘, ‘NY‘)
hashmap.set(states, ‘Michigan‘, ‘MI‘)

# create a basic set of states and some cities in them
cities = hashmap.new()
hashmap.set(cities, ‘CA‘, ‘San Francisco‘)
hashmap.set(cities, ‘MI‘, ‘Detroit‘)
hashmap.set(cities, ‘FL‘, ‘Jacksonville‘)

# add some more cities 
hashmap.set(cities, ‘NY‘, ‘New York‘)
hashmap.set(cities, ‘OR‘, ‘Portland‘)

# print out some cities 
print ‘-‘ * 10
print "NY State has: %s" % hashmap.get(cities, ‘NY‘)
print "OR State has: %s" % hashmap.get(cities, ‘OR‘)

# print some states 
print "-" * 10
print "Michigan‘s abbreviation is: %s" % hashmap.get(states, ‘Michigan‘)
print "Florida‘s abbreviation is: %s" % hashmap.get(states, ‘Florida‘)

# do it by using the state then cities dict 
print "-" * 10
print "Michigan has: %s" % hashmap.get(cities, hashmap.get(states, ‘Michigan‘))
print "Florida has: %s" % hashmap.get(cities, hashmap.get(states, ‘Florida‘))

# print every state abbreviation 
print "-" * 10
hashmap.list(states)

# print every city in state
print "-" * 10
hashmap.list(cities)

print "-" * 10
state = hashmap.get(states, ‘Texas‘)

if not state:
    print "Sorry, no Texas"
    
# default values useing //= with the nil result 
# can you do this on one line?
city = hashmap.get(cities, ‘TX‘, ‘Does Not Exist‘)
print "The city for the state ‘TX‘ is: %s" % city 

# Yes, I can do this on one line.
print ‘The city for the state \‘TX\‘ is: %s‘ % hashmap.get(cities, ‘TX‘, ‘Does Not Exist‘)

输出

Notes:

①列表是有序的,字典是key与value的映射且是无序的

②字典的items()方法,返回一个元组,该元组包括一对key-value;get(key[,return])返回key所对应的value,若key不存在且制订了return的值,返回return值,否则返回None

③列表的enumerate()函数,迭代时可以方便的获取索引和索引指向的元素

④hash()函数是哈希值函数,将对象转化为数字,对象不同,数字也不同

时间: 2024-10-09 21:40:17

笨方法学python, Lesson 38, 39的相关文章

笨方法学python Lesson 43

我的小游戏  未完待续 # -*- coding:utf-8 -*- def start():     print u"昨晚你喝了烂醉,醒来发现躺在一个陌生的地方,不像是朋友送来的旅馆.这恐怖房间必非久留之地."     print u"你必须逃离这间房子."     print "Are you ready? Here wo go."     game_start = BeginRoom()     game_start.enter() def

笨方法学python Lesson 46 - 49

Exercises 46 代码 setup.py try:     from setuptools import setup except ImportError:     from distutils.core import setup config = {     'description': 'My Project',     'author': 'Jer',     'url': 'URL to get it at.',     'download_url': 'Where to dow

Day 2 笨方法学Python

手打第25个练习,出错的地方有: def 定义后indent 4个空格,第一行空了以后,直接换行是跟上面对其的,但是运行时是错误的,我的解决方法是,重新手动空格4个: 还发现一个问题就是,中文解释,以前老是出错 # -*- coding : utf-8 -*- 网上看到的加上这个就可以了,但是我的还是出错.今天偶然在削微寒的博客http://www.cnblogs.com/xueweihan/的GIthub上找到了答案 #coding:utf-8 换成这个语句就可以了.以后,尽量每句都加上注释,

笨方法学python(5)加分题

这篇对应的是习题17,更多文件操作 # -*- coding: utf-8 -*- #对文件更多操作复制A文件的内容到B文件 #from sys import argv from os.path import exists prompt = "> " from_file = raw_input("please input the filename where you want to copy from: >") #in_file = open(from_

笨方法学python(6)加分题--列表与字典的区别

he string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line: "PAHNAPLSIIG

笨方法学python(4)加分题

自己在看笨方法学python这本书,把自己觉得有学到东西的记下来,并不是每个习题都有记录 这次对应的是:习题 6: 字符串(string)和文本 这次只要是想说明一下,在print语句中,只要带有格式化字符的,会当作格式化来处理 脚本1: 结果1: 打出的结果没有%r,那是因为当作格式化处理了 脚本2: 结果2: 会报错,因为print joke_evaluation %hilarious 是格式化的标识 脚本3: 结果3:

笨方法学Python,Lesson 32 - Lesson 34

Exercise 32 代码 the_count = [1, 2, 3, 4, 5] fruits = ['apples', 'oranges', 'pears', 'apricots'] change = [1, 'pennies', 2, 'dimes', 3, 'quarters'] # this first kind of for-loop goes through a list for number in the_count:     print "This is count %d&q

笨方法学Python,Lesson 35, 36

Exercise 35 代码 from sys import exit  def gold_room():     print "This room is full of gold. How much do you take?"          choice = raw_input("> ")     if "0" in choice or "1" in choice:         how_much = int(c

笨方法学Python(3)

习题 20: 函数和文件 seek()的用法: >>> f.readlines()#读取出文件的所有内容 ['abcdefghijk\n'] >>> f.seek(2) #将当前的位置设定为相对当前位置的2的位置. >>> f.read(4) #读取4个位置的数据(从设定的位置开始读取,也就是ab 后面的四个字符) 'cdef' >>> f.seek(2,1)#将当前的位置(2)设定为相对当前位置的2的位置. >>>