编程解决两大问题:数据如何存储、数据怎么处理
问题:输入3个工程师信息,判断输入数据的正确性,输出工程师信息,将信息保存到文件
存储数据的方式1:变量,编程方式:面向过程线性编程
name1 = input('姓名:')#屏幕上提示"姓名:",用户输入后,存入name
gender1 = input('性别:')
age1 = int(input('年龄:'))
name2 = input('姓名:')#屏幕上提示"姓名:",用户输入后,存入name
gender2 = input('性别:')
age2 = int(input('年龄:'))
name3 = input('姓名:')#屏幕上提示"姓名:",用户输入后,存入name
gender3 = input('性别:')
age3 = int(input('年龄:'))
print(name1,gender1,age1)# 查看内存中name处的数据
print(name2,gender2,age2)# 查看内存中name处的数据
print(name3,gender3,age3)# 查看内存中name处的数据
缺点:占内存太多,代码重复,数据与代码不分离
数据存储方式:列表,编程方式:面向过程线性编程
engineers = [] # 将来存储所有工程师信息
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
engineers.append([name,gender,age]) # 把变量存入列表
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
engineers.append([name,gender,age]) # 把变量存入列表
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
engineers.append([name,gender,age]) # 把变量存入列表
print (engineers)
优点:变量定义减少,只有3个变量,减少内存占用
缺点:代码有重复,数据与代码不分离
列表缺点:占用内存比变量少,代码重复,数据与代码不分离,数据含义不清晰
字典
engineers = [] # 列表
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
e = {'name':name,'gender':gender,'age':age} # 字典
# print (e) # 调试代码
engineers.append(e) # 把字典e加入到enginners中
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
e = {'name':name,'gender':gender,'age':age}
engineers.append(e)
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
e = {'name':name,'gender':gender,'age':age}
engineers.append(e)
print(engineers)
字典的特点:占用内存比变量少,代码重复,数据与代码不分离,但数据的含义清晰
循环:处理代码的方式,代码是处理数据的
engineers = [] # 空列表
# for i in range(3): # 0~2
while i<=3:
print('请输入第%s个人信息'%(i))
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
if 18<=age<=65:
e = {}
e['name'] = name
e['gender'] = gender
e['age'] = age
engineers.append(e)
i=i+1 # 下一个
else:
print('年龄只能输入18~65')
print(engineers)
循环的特点:极大减少代码重复,但还是线性的面向过程编程
函数
def input_info(): # 输入数据
engineers = []
i = 1
while i<=3: # 1~3
print('请输入第%s个人信息' % (i))
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
if decide(age):
e = {'name':name,'gender':gender,'age':age}
engineers.append(e)
i=i+1
else:
print ('年龄只能输入18~65')
return engineers
def output(engineers = []): # 输出数据
for e in engineers: # e表示engineers列表中的元素(字典)
for k,v in e.items():
print (k,v)
def decide(age): # 判断数据正确性
if 18<=age<=65:
return True
else:
return False
print(input_info())
es = input_info() # 结果列表存入es
output(es)
类
class InOut:
def input_info(self): # 输入数据,self相当于java中的this
self.engineers = []
i = 1
while i <= 3: # 1~3
print('请输入第%s个人信息' % (i))
name = input('姓名:')
gender = input('性别:')
age = int(input('年龄:'))
if self.decide(age):
e = {'name': name, 'gender': gender, 'age': age}
self.engineers.append(e)
i = i + 1
else:
print('年龄只能输入18~65')
# return engineers
def output(self): # 输出数据
for e in self.engineers: # e表示engineers列表中的元素(字典)
for k, v in e.items():
print(k, v)
def decide(self,age): # 判断数据正确性
if 18 <= age <= 65:
return True
else:
return False
if __name__ == '__main__': # 调试代码,自己测试的代码
a = InOut() # a是对象
es = a.input_info()
a.output()