作者回复: 您好,所有人学编程都是要从0基础慢慢学习积累的,所以想到一些问题就多利用搜索引擎和文档查看,多调试和编写程序,会很快提升你的编程能力的。有觉得技术点把握不好的地方也欢迎你多留言:p 下面我把程序做一下简化和修改,它的目的是为了每输入一次年份,计算一次生肖,并且记录年份对应生肖的查询次数。 chinese_zodiac = u'猴鸡狗猪鼠牛虎兔龙蛇马羊' cz_num = {} for i in chinese_zodiac: cz_num[i] = 0 while True: year = int(input('year:')) cz_num[chinese_zodiac[year % 12]] += 1 for eachKey in cz_num.keys(): print('%s %d' %(eachKey, cz_num[eachKey])) 为了达到这个目的,我要先让字典里面的key是生肖,计数器是0 for i in chinese_zodiac: cz_num[i] = 0 这两个语句就是起到这个功能的。执行完之后,字典就变成下面这样 {猴:0,鸡:0,狗:0,猪:0,鼠:0,牛:0,虎:0,兔:0,龙:0,蛇:0,马:0,羊:0} 当我输入2018 赋值给变量year之后,程序会计算它对应的年份--狗,执行 cz_num['狗'] += 1 字典就变成了 {猴:0,鸡:0,狗:1,猪:0,鼠:0,牛:0,虎:0,兔:0,龙:0,蛇:0,马:0,羊:0} 如果再次输入2018、会再执行cz_num['狗'] += 1 对生肖进行累加,相应的生肖狗会变为值2,其他的生肖因为没有输入,所以依然为0。 如果不为字典赋初始值0,无法进行上面的 += 1 的运算,它是数学运算,不能和空值进行相加;也没办法对生肖为0的结果进行输出了,不知道我这样解释你能否理解这行代码起到的作用。 建议在需要观察的变量下面增加print()函数,以便你能更直观的看到执行结果。
作者回复: 这个例子很好,如果能把year0 year1变量替换为更有意义的变量名称, elif改写为else形式,是一个非常好的演示用例。
作者回复: 现阶段使用字典有两大好处需要掌握,第一个是相对于字符串、数字、列表等基础数据结构,它有一个唯一的名字,即“键”,方便你使用名字操作具体的内容“值”, 第二个就是使用字典类型存储大量的内容,查找速度要比其他基本类型要快 字典的嵌套可以理解为,以前将字符串、数字作为“值”赋值给字典的“键”,现在将一个字典作为“值”赋值给字典的“键” 看下下面的例子 # 首先我们可以定义一个非嵌套的字典 dict1 = {'tom': 'a', 'jerry': 'b'} # 为非嵌套的字典增加一个新的键/值对,赋值的类型是字符串 dict1['mary1'] = 'c' # 输出新的字典的内容 print('没有嵌套的字典 %s' % dict1) # 如果mary2本身就是一个字典可以直接像字符串一样增加到dict1中 dict1['mary2'] = {'name': 'mary mary', 'age': 18} # 输出新的字典的内容 print('有嵌套的字典 %s' % dict1) # 输出外层字典的内容 print(dict1['mary2']) # 输出内层字典的内容 print(dict1['mary2']['age']) 这种字典里面的值也是字典类型就是字典嵌套了
作者回复: 使用ctrl+v 粘贴之后,pycharm会自动为你调整缩进格式。如果缩进不符合你的要求,可以选中多行,用tab键一次性多行缩进。
作者回复: “等价”不准确,在输入时由于python上层函数做了处理,所以一个汉字和一个英文字符都被计数为1个,当然底层不是这样,如果是utf-8编码,一个汉字是三个字节
作者回复: 程序写法的好坏要根据需求而定,像demo这么短小的代码两种写法没有比较的意义,如果一定要对这段代码比较的话,为什么不写成: if 条件成立: wiile 开始执行循环 更易读呢?
作者回复: 我提供两个找到问题的解决方法给你。帮你定位一下,为什么不能统计 第1个方法是在执行之后要查看执行的结果,是否有报错信息。当你的程序出现缩进问题或者是格式问题啊,以及手写的过程当中,可能会出现输入失误。这时候在执行的结果中就会有报错信息。根据爆出信息可以定位在第几行,出现了问题,然后将注意力集中在这样的行数范围解决无法统计的问题。 第2个方法呢是你要主动出击。首先观察一下,在pycharm是否有变量下面出现红色的波浪线,这些标记是提示你该变量在负值或者引用的过程当中可能出现错误。如果也没有这样的红色的波浪线,可以在程序的运行过程当中增加一个 print语句。使用打印语句来打印程序执行的中间过程变量,a是否按照你希望的运行方式执行了。 通过这样的两个方法,往往能够找到程序运行过程当中的逻辑问题,同时也能对你的编程技能和把控程序的能力有所提升。
作者回复: 你好, 两种用法都是对的,首先给善于思考并动手验证自己的想法这种做法点个赞! 我在视频中这样写的目的是想尽可能去用不同的方法,让你了解更多的字典的内置函数. 纠正一点, cz_num是字典类型并非列表类型. 加油
作者回复: 1 注意看报错信息: line 37, in <module> 可知第一个问题在37行 z_num 应该为 cz_num 2 KeyError 这是典型的字典错误,可以在这行上面通过简单的 print(n) print(zodiac_name[n-1]) 等方法输出对象的内容,判断是否符合自己期望的值 在更加熟练python之后,可以用pycharm来进行程序的调试,学会调试程序也是开发的基本功之一
作者回复: TypeError: string indices must be integers 注意看这个错误提示,这里你的sx是字符串,但是使用了sx[each_key] 这样的用法,导致了报错,要么改sx类型,要么each_key改为整数