老男孩python学习阶段性练习
问题一:命名规范
答:
要求:
1.数字、字母、下划线组成
2.不能以数字开头
3.不能是python的关键字
建议:
1.见名知意
2.若需要用多个单词组成,用下划线连接
补充:
不使用驼峰式命名规则
问题二:字节和位的关系
答:
字节(byte):计算机里最小的存储单位
位(bit):计算机里最小的表示单位
1byte=8bit
问题三:看代码写结果
name = 'wupeiqi'
result = name.upper()
print(name)
print(result)
答:
print(name):'wupeiqi'
print(result):'WUPEIQI'
问题四:'李泉'使用utf-8编码时,占用字节及位数,使用gbk编码,占用字节及位数
答:
utf-8:占6个字节,48位
gbk:占4个字节,32位
问题五:简述一下两段代码的区别
代码一:
n1 = 'wupeiqi'
n2 = n1
代码二:
n1 = 'wupeiqi'
n2 = 'wupeiqi'
答:
代码一:n1和n2指向的是同一内存地址。
代码二:n1和n2指向的是不同的内存地址。
问题六:默认字符串中的常用功能并描述作用
答:
1.upper:字符串转大写
2.lower:字符串转小写
3.strip:去除两侧的空格/换行符/制表符/其他指定要去除的内容
4.split:字符串根据指定的分隔符进行切分
5.replace:字符串替换
6.join:字符串拼接,以一个字符串位连接符连接一个可迭代对象中的内容,内容的每一项必须为字符串
7.startswith:判断字符串以什么开头
8.endswith:判断字符串以什么结尾
9.count:计算一个字符在一个字符串中出现的次数
10.index:返回一个字符在一个字符串中出现的位置
11.isdigit:判断字符串的内容是否为纯数字
12.isalpha:判断字符串的内容是否为纯字母
13.isspace:判断字符串的内容是否为纯空白
问题七:书写布尔值为false的常用值
答:
0、None、''、[]、()、{}
问题八:书写python2和python3的区别
答:
1.默认解释器编码
py2:ascii
py3:utf-8
2.输入
py2:raw_input
py3:input
3.输出
py2:print 要输出的内容
py3:print(要输出的内容)
4.除法
py2: 只能保留整数位
py3: 能保存所有
5.整型
py2: 超出长度之后就会变为long类型
py3: 只有int没有long,所有数字都是int类型
问题九:简述深浅拷贝
答:
浅拷贝:不管多么复杂的数据结构,浅拷贝都只会copy一层。
深拷贝: 拷贝嵌套层次中的所有可变类型
问题十:分别用for和while循环实现 1-2+3-4+5-....+99
答:
for循环:
total = 0
for i in range(1, 100):
if i % 2 == 0:
total -= i
else:
total += i
print(total)
while循环:
total = 0
i = 1
while i < 100:
if i % 2 == 0:
total -= i
else:
total += i
i += 1
print(total)
问题十一:用range实现打印 100,99,98 ...1,0
答:
for i in range(100, -1, -1):
print(i)
问题十二:看代码写结果
n1 = [11, 22, 33]
n2 = n1
n3 = n1.copy()
n1[1] = 666
print(n1)
print(n2)
print(n3)
答:
[11,666,33]
[11,666,33]
[11,22,33]
问题十三:打印9 *9乘法表
答:
for i in range(1, 10):
for j in range(1, i + 1):
print('%d * %d = %d' % (j, i, i * j), end=' ')
print()
问题十四:判断以下代码是否正确,如果错误则改正,否则书写结果
name = '你{0},{1}无理取闹'
n1 = name.format('冷酷','无情')
print(n1)
n2 = name.format(**['冷酷','无情'])
print(n2)
name = '你{xx},{oo}无理取闹'
n3 = name.format(oo='冷酷',xx='无情')
print(n3)
n4 = name.format(*{'xx':'冷酷','oo':'无情'})
print(n4)
答:
print(n1):你冷酷,无情无理取闹
正确代码如下:
n2 = name.format(*['冷酷','无情'])
print(n2)
print(n2):你冷酷,无情无理取闹
print(n3):你无情,冷酷无理取闹
正确代码如下:
n4 = name.format(**{'xx':'冷酷','oo':'无情'})
print(n4)
print(n4):你冷酷,无情无理取闹
问题十五:计算用户输入的内容中索引为奇数且值为数字的个数
答:
num = 0
content = input('请输入内容:')
for i in range(0, len(content)):
if i % 2 != 0 and content[i].isdigit():
num += 1
print(num)
问题十六:实现购物车
功能要求:
要求用户输入自己拥有的总资产,例如:2000。
显示商品列表,让用户根据序号选择商品,加入购物车购买,
如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
购买成功时,需要打印购物清单
商品列表:
goods = [
{'name': '电脑', 'price': 1999},
{'name': '鼠标', 'price': 10},
{'name': '游艇', 'price': 20},
{'name': '美女', 'price': 998}
]
答:
# ! /usr/bin/env python
# -*- coding:utf-8 -*-
goods = [
{'name': '电脑', 'price': 1999},
{'name': '鼠标', 'price': 10},
{'name': '游艇', 'price': 20},
{'name': '美女', 'price': 998}
]
goods_dict = {} # 构建空字典存储商品信息
goods_buy_dict = {} # 构建空字典存储用户的购买信息
total = 0 # 存储商品总额
sum_amount = input('请输入您拥有的总资产:').strip()
# 打印商品列表
for index, item in enumerate(goods, start=1):
goods_dict[str(index)] = list(item.values())
print('商品列表如下:')
for dict_index, dict_content in goods_dict.items():
print('%s:%s %d' % (dict_index, dict_content[0], dict_content[1]))
# 让用户输入购买信息,并存入到goods_buy_dict中,以购买商品序号为键,以购买数量为值
while True:
buy_index = input('请输入要购买的物品序号:').strip()
if goods_dict.get(buy_index):
while True:
buy_count = input('请输入要购买的物品数量:').strip()
if buy_count.isdigit():
goods_buy_dict[buy_index] = int(buy_count)
break
else:
print('输入有误,请重新输入!')
continue
else:
choice = input('您输入的商品序号不在商品列表中,是否继续购买(Y/N):').strip()
if choice.upper() == 'Y':
continue
else:
break
# 合计商品总额,并与用户输入总资产进行对比,如果商品总额大于总资产,提示账户余额不足,否则,购买成功,并打印购物清单
for buy_dict_index, buy_dict_count in goods_buy_dict.items():
total += goods_dict[buy_dict_index][1] * buy_dict_count
if total > int(sum_amount):
print('账户余额不足!')
elif len(goods_buy_dict) == 0:
print('您的购物车是空的!')
else:
print('购买成功!\n')
print('购物清单如下:')
for k, v in goods_buy_dict.items():
print('%s:购买%s个' % (goods_dict[k][0], v))
print('合计金额:%s元' % (total))
问题十七:看代码写结果
for i in range(0, 5):
print(i)
for j in (0, i):
print(j)
答:
0
0
0
1
0
1
2
0
2
3
0
3
4
0
4
问题十八:看代码写结果
while True:
for i in range(10):
print(i)
if i == 5:
continue
else:
break
答:
0
1
2
3
4
5
6
7
8
9
问题十九:补充代码
有如下列表[11, 22, 33, 44, 55, 66, 77, 88, 99, 90],将所有大于66的值保存在字典的第一个key中,将小于66的值保存到第二个key的值中。
即:{'k1':大于66的所有值列表,'k2':小于66的所有值列表}
代码:
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
result = {}
for row in li:
答:
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
result = {}
for row in li:
if row > 66:
if result.get('k1'):
result['k1'].append(row)
else:
result['k1'] = [row]
elif row < 66:
if result.get('k2'):
result['k2'].append(row)
else:
result['k2'] = [row]
print(result)
问题二十:写代码
将列表 li = [11, 22, 33, 44, 55]的第一个和最后一个值相加并插入索引为3的位置
答:
li = [11, 22, 33, 44, 55]
li.insert(3,li[0]+li[-1])
print(li)
问题二十一:写代码
有以下数字:1,2,3,4,5,6,7,8共8个数字,可以组成多少个互不相同且无重复的两位数
答:
li = ['1', '2', '3', '4', '5', '6', '7', '8']
result = []
for i in li:
for j in li:
if i != j:
if i + j not in result:
result.append(i + j)
elif j + i not in result:
result.append(j + i)
print(result)
问题二十二:写代码
有以下列表,请找到列表中任意两个数字相加等于9的元素的索引
nums = [2, 7, 11, 15, 1, 8, 7]
结果为:[(0, 1), (0, 6), (4, 5)]
答:
nums = [2, 7, 11, 15, 1, 8, 7]
result = []
for i in range(len(nums)):
for j in range(i, len(nums)):
if nums[i] + nums[j] == 9:
result.append((i, j))
print(result)
问题二十四:基于文件实现用户登录程序
提示用户输入用户名和密码,检查用户名和密码是否正确
保存用户名密码的文件user.txt
答:
#创建文件
li = ['alex|123123', 'root|89788fs', 'eric|mimimi']
f = open(file='user.txt', encoding='utf-8', mode='w')
for i in li:
f.writelines(i + '\n')
f.close()
#读取文件
message = '登录失败'
f = open(file='user.txt', encoding='utf-8', mode='r')
input_name = input('请输入用户名:')
input_pwd = input('请输入密码:')
for j in f:
l = j.strip().split('|')
if input_name == l[0] and input_pwd == l[1]:
message = '登录成功'
break
print(message)
f.close()
问题二十五:看代码书写结果
name = '海娇'
userlist = ['老狗', '方惊鸿']
userlist.extend(name)
print(userlist)
答:
['老狗', '方惊鸿', '海', '娇']
问题二十六:列举int、bool、str、list、tuple、dict、set中可以作为字典的key的类型
答:
int、bool、str、tuple
问题二十七:转换
a.将字符串s = 'alex'转换成列表
b.将字符串s = 'alex'转换成元组
c.将列表li = ['alex', 'seven']转换成元组
d.将元组tu = ('alex', 'seven')转换成列表
e.将列表li = ['alex', 'seven']转换成字典,且字典的key按照10开始向后递增
答:
a.
s = 'alex'
print(list(s))
b.
s = 'alex'
print(tuple(s))
c.
li = ['alex', 'seven']
print(tuple(li))
d.
tu = ('alex', 'seven')
print(list(tu))
e.
li = ['alex', 'seven']
d = {}
k = 10
for i in li:
d[k] = i
k += 1
print(d)