Python问题解决(新手易错,重复向列表中添加字典作为元素,函数sort()的高级用法,修改全局变量)

84 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

新手易错

一、输入问题

x = input ('亲输入x的值:')

这里的input只返回字符串类型的,如果需要输入的是其他类型需要类型转化 如,需要输入整型

x = int(input ('亲输入x的值:'))

二、缩进问题

一定要缩进对齐 一定要缩进对齐 一定要缩进对齐 哪怕是多一个小小的空格都会导致稀奇古怪的问题

重复向列表中添加字典作为元素

向一个列表中添加字典作为元素时错误

描述

利用一个字典为过渡重复向一个列表中添加字典作为元素时,列表中每个元素都是最后添加的那个值,而不是按顺序输入的字典 ==源码片段==:完整代码请查看开头的博客链接


def luru ():                                #录入信息
    i = int (input('请输入需要输入的人数:'))
    for i in range(i) :
        print('\n开始录入第%d位教师信息\n\n'%(int(len(xinxi))+1))
        xinxi1['教师号'] = input('请输入教师号:')
        xinxi1['姓名'] = input('请输入姓名:')
        xinxi1['性别'] = input('请输入性别:')
        xinxi1['年龄'] = input('请输入年龄:')
        xinxi1['电话'] = input('请输入电话:')
        xinxi1['工资'] = input('请输入工资:')
        xinxi1['职称'] = input('请输入职称:')
        xinxi1['课程名称'] = input('请输入3课程名称:')
        xinxi1['班级数'] = input('请输入班级数:')
        xinxi.append(xinxi1)   
    else :
        print ('输入结束')

解决

问题是python中是名字像标签一样贴在变量上xinxi.append(xinxi1),是把变量放入列表会随着xinxi1修改而变,所以用dict转化一下,这样录入列表的信息就不会随xinxi1而改变 将上面代码片段的

xinxi.append(xinxi1)

修改为

xinxi.append(dict(xinxi1))

==这是我自己的理解有错误还请批评指教==

函数sort()的高级用法

sort()函数原型:

list.sort(key=None, reverse=False) 其实还有一个参数的,在python3 中不用了

参数reverse

reverse决定排序是正序还是反序 reverse接受的是一个bool类型的值 (Ture or False), 表示是否颠倒排列顺序,一般默认的是False(正序), 注意Ture or False第一个字母是大写的

key参数

key接受的是一个只有一个形参的函数,这里的形参传入的将是每一个列表值 形式如下 def f(a): return len(a) ==作用是==key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序(正序or反序)

用法示例

list1 = [c,a,b]
def mykey (a):
	return ard(a)    #取ascll码
list1.sort(key = mykey,reverse = Ture)
print(list1)
结果输出为
[c,b,a]

多重用法

list1 = [('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]
list1.sort(key = lambda x:x[1],reverse =True)
print(list1)
结果输出为
 [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

个人理解,有错误请批评指教

修改全局变量

问题

num = 3 
def xiugai();
	num = 4
	print(num)
print(num)

这里的本意是调用xiugai()时候将num修改,但是其实全局变量num并未修改,这是在函数内部时候值变了 上述代码的结果为

4
3

解决

全局变量在自己定义的函数中可以调用,但是不能修改,修改的话会自动在函数内定义一个同名局部变量,两个变量互不影响,若确实需要在函数内修改全局变量则需要使用global在函数内声明为全局变量 如

num = 3 
def xiugai();
	global num
	num = 4
	print(num)
print(num)

这样就可以得到需要的结果