野餐用品计数

之前写过一段,字符在字符串中出现次数的代码

import pprint
message = 'It was a bright cold day in April, ' \
'and the clocks were striking thirteen.'
count = {}
for character in message:
count.setdefault(character, 0)
count[character] += 1
pprint.pprint(count)

在写野餐用品计数代码时,发现多了个return

由于一直对于返回值的概念不甚了解,又把两段代码拿出来做了对比

并且把野餐用品代码拆分后,每个判断后加上print来查看流程及参数值

发现如果不用return给totalBrought()设一个返回值,

那当apple = totalBrought(allGuests,‘apples’)时,就没有一个值可以返回给apple

由此对return又多了点了解

原代码是没有apple=这一句的,直接用

print("Apples: " + str(totalBrought(allGuests, 'apples')))

来替代了Apples打印行

allGuests = {'Alice': {'apples': 5, 'pretzels': 12},
'Bob': {"ham sandwiches": 3, 'apples': 2},
'Carol': {'cups': 3, 'apple pies': 1}} def totalBrought(guests, item):
numBrought = 0
for k, v in guests.items():
numBrought = numBrought + v.get(item, 0)
return numBrought apple = totalBrought(allGuests, 'apples') print("Number of things being brought:")
print("Apples: " + str(apple))
print("Cups: " + str(totalBrought(allGuests, 'cups')))
...

=================================

物品清单统计:

1. 一开始写,很呆滞,每个物品单独一个打印语句

2. 还把return写倒了total行同缩进,导致返回的数值一直是1,修改后:

inventory = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}

def totalitem(allItems):
total = 0
for k, v in allItems.items():
total = allItems.get(k, 0) + total
return total items = totalitem(inventory) print('Inventory:' + "\n"
+ str(inventory['arrow']) + ' arrow' + "\n"
+ str(inventory['gold coin']) + ' gold coin' + "\n"
+ str(inventory['rope']) + ' rope' + "\n"
+ str(inventory['torch']) + ' torch' + "\n"
+ str(inventory['dagger']) + ' dagger' + "\n"
+ 'Total number of items: ' + str(items))

3. 参考了提示并整合后,打印加入到循环中

inventory = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}

def displayInventory(inventory):
print('Inventory')
total = 0
for k, v in inventory.items():
print(str(v) + ' ' + k)
total += v
print('Total number of items:' + str(total)) displayInventory(inventory)

============

假设征服一条龙的战利品表示为这样的字符串列表:
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
写一个名为 addToInventory(inventory, addedItems)的函数,

其中 inventory 参数是一个字典,表示玩家的物品清单(像前面项目一样),

addedItems 参数是一个列表,就像 dragonLoot。

addToInventory()函数应该返回一个字典,表示更新过的物品清单。

def displayInventory(inventory):
print('Inventory')
total = 0
for k, v in inventory.items():
print(str(v) + ' ' + k)
total += v
print('Total number of items:' + str(total)) def addToInventory(inventory, addedItems):
for k in addedItems:
if k in inventory.keys():
inventory[k] += 1
else:
inventory[k] = 1
return inventory inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)

1. 开始想到将列表转换成字典,再将两个字典比较后拼接

2. 若字典中不存在key,则可用dic[key]=value来增加键值对

3. 两个字典相加:相同key,值相加;不同key,值保留

dica = {'a': 1, 'b': 2, 'c': 3, 'f': "hello"}
dicb = {'b': 3, 'k': 'world'}
dic = {}
for key in dica:
if dicb.get(key):
dic[key] = dica[key] + dicb[key]
else:
dic[key] = dica[key]
for key in dicb:
if dica.get(key):
pass
else:
dic[key] = dicb[key] print(dic)

4. 起初代码一直如下,试了很久v+=1,但v的值始终无变化(其实是混淆了v和dic[k]的意义,v并不是dic[k])

重看定义:key()、values()、items()方法返回的值是元组,即不可变(设定如此,其实是搅屎棍,变不变的都无所谓)

因为k,v只是字典在使用方法时返回的值(返回的键值值赋值给了变量k,v),所以即使修改变量v的值,对字典本身的值是不起作用的

5. 所以需要循环累加字典内键的值,必须用dict[k]+=1

dictA = {'a': 1,  'b': 42}
listB = ['b', 'c', 'b'] for i in listB:
for k, v in dictA.items():
print(i, k, v, dictA[k])
v += 1 # ×
# dictA[k] += 1 # √

字典:求和计数(return知识巩固)的更多相关文章

  1. python 用字典进行计数的三种常用方法

    1.常规方法 初始化一个字典,遍历列表或字符串,如果遍历的值已经存在于字典中,则字典值直接加1,否则,令字典键为当前遍历的值,字典值为1, 代码如下: >>> dic = {} &g ...

  2. Python中字符串、列表、元组、集合、字典中的一些知识,有些不太常见

    ————————笔记——————————# 字符串1. 字符串是不可变的.2. 字符串切片输出:`[start:end:step]`.使用`a[::-1]`倒序输出字符串.3. `str.split( ...

  3. python 创建字典以及操作字典----这是基础知识

    当你编程久了,发现所有的东西都是建立在基础之上的,庞大的代码 你要识别出它的类型是什么 或者返回后类型是什么!? 根据返回的类型 或者需要操作的对象是什么类型  就可以选择相应的方法进行处理 #创建字 ...

  4. Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...

  5. hdu 2846 字典树变形

    mark: 题目有字串匹配的过程 有两点 1.为了高效的匹配子串 可以把所有的子串都预处理进去 然后字典树计数就放在最后面 2.在同一个母串处理自串的时候 会有重复的时候 比如abab  这里去重用个 ...

  6. python学习-day12:列表、元祖、字典介绍和内置

    list:列表 >>>----可以被修改.修改成元素,元素可以使单独的数字,也可以是:新的list. 通过:链表..每个元素存储的时候,同时会指向下一个元素. 二.list编辑修改方 ...

  7. JavaEE系列之(一)JSP基础知识详解

    一.JSP基础语法     1.JSP简介        JSP(Java Server Pages),其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签.JSP是一种动态网页 ...

  8. redis 字典

    redis 字典 前言 借鉴了 黄健宏 的 <<Redis 设计与实现>> 一书, 对 redis 源码进行学习 欢迎大家给予意见, 互相沟通学习 概述 字典是一种用于存储键值 ...

  9. (转)C++——std::string类的引用计数

    1.概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里 ...

  10. 利用Runtime实现简单的字典转模型

    前言 我们都知道,开发中会有这么一个过程,就是将服务器返回的数据转换成我们自己定义的模型对象.当然服务器返回的数据结构有xml类型的,也有json类型的.本文只讨论json格式的. 大家在项目中一般是 ...

随机推荐

  1. django项目初创建报错TypeError: unsupported operand type(s) for /: 'str' and 'str'

    解决办法: 'DIRS': [os.path.join(BASE_DIR, 'templates')],

  2. 关闭内核Debug_log打印!

    echo 0 > /proc/sys/kernel/printk  \r

  3. python3 小知识

    本博客分为三部分,一是字典和函数结合,代替if-else判断语句:二是数组的元素带有括号:三是完整代码.图片略多. 1. 字典和函数结合,代替if-else判断语句   写函数时经常会遇到一个函数的某 ...

  4. Paddiing 组件

    一.Flutter Paddiing 组件 在 html 中常见的布局标签都有 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属性.这个时候我们可以用 Pa ...

  5. python下载文件headers

    from aiohttp import webfrom urllib.parse import quote r = web.Response()# r.content_type = 'applicat ...

  6. nginx配置透明代理

    来自:https://blog.csdn.net/weixin_34072458/article/details/91677177 user nginx; worker_processes auto; ...

  7. yzh 总线选讲

    分布式:通过总线,我们可以用"通信""消息"等视角,把各个模块拆成各个小状态机,每个小状态机互相之间独立,通过总线通信 集中式:通过一个大状态机生成所有控制信号 ...

  8. CF1534F2 Falling Sand (Hard Version)

    个人思路: 每个点向相邻沙子连边,向本列和相邻 \(2\) 列下方第一个沙子连边. 对于一个 DAG,所有入度为 \(0\) 的点会覆盖全部点.我们缩点即可通过 F1. 但是这样做是过不了 F2 的. ...

  9. Counting Triangles

  10. vue v-for 使用

    html <div> <el-button @click="addListItem" type="primary" style="p ...