习题练习
1.实现一个整数加法计算器(俩个数相加)
如: content = input("请输入内容:")
如用户输入:5+9或者5 + 9 ,然后进行分割再进行计算
content = input("请输入内容:").strip().split("+") num = int(content[0]) + int(content[1]) print(num)
扩展多个数相加
content = input("请输入内容:").strip().split("+")
count = 0
for i in content: #循环 count = count + int(i)#进行自加 print(count)
# content = input("请输入内容:").strip() # digit_list = content.split("+") # sum = 0 # for i in digit_list: # i = int(i) # sum += i # print(sum)
2.计算用户输入的内容中有几个整数.
如 content = input("请输入内容") gghguhy123hgygyguy
content = input("请输入内容") count = 0 for i in content: if i.isalnum(): count += 1 print(count)
扩展: 将123看成是一个整体,比如输入的是123,识别成是一个整体,返回1而不是返回3.
待定
3.查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并以"c"结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表.
方法一: 用字符串操纵方法startswith,endswith
li = ["taibai ", "alexC", "AbC", "egon", "Rittian", "Wusir", " aqc"] s = [] for i in li: i = i.strip() if (i.startswith("A") or i.startswith("a")) and i.endswith("c"): s.append(i) for j in s: print(s)
返回:['aqc'] 先将列表循环,然后去除空格,判断每次循环i这个字符串是不是以什么开头和结尾,注意or与and同时出现存在优先级的问题,所以需要将前面的or部分
括起来,满足条件的就添加到空列表s里面,然后打印出来.
方法二:将单个字符串提出来,用索引判断.
l1 = [] for i in li: i = i.strip() if i[0].upper() == "A" and i[-1] == "c": l1.append(i) print(l1)
返回:['aqc'] 同样的循环,当i循环到某一个列表内的字符串时,用索引判断,str的前面和后面是不是A和c,满足条件就添加到列表l1中.
4.列表嵌套,打印列表里的每一个元素.
li = [1, 2, 3, ["alex", "wusir", "老男孩"], 4] for i in li: #循环整个大的列表 if type(i) == list:#当i等于列表的时候 for j in i: # print(j) else: print(i)
返回:
1
2
3
alex
wusir
老男孩
4
要求用for循环加上range写
li = [1, 2, 3, ["alex", "wusir", "老男孩"], 4] for index in range(len(li)): if type(li[index]) == list: for i in range(len(li[index])): print(li[index][i]) else: print(li[index])
5.开发敏感词语过滤程序,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符:敏感词列表 li = ["苍老师","东京热",”武藤兰”,”波多野结衣”]
则将用户输入的内容中的敏感词汇替换成***,并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到上述的列表中
思路:循环的是敏感词汇列表.i分别是li里的每一个元素,
如果敏感词汇在ret输入的评论里面
就将他替换
替换了之后
添加到一个新的列表里
打印
li = ["苍老师", "东京热", "武藤兰", "波多野结衣"] li1 = [] ret = input("请输入评论内容:") for i in li: if i in ret: ret = ret.replace(i, "*" * len(i)) li1.append(ret) print(li1) #i的值循环出来就是列表里的敏感词汇,题目是要将敏感词汇替换成为*号,用replace(old.new.n/次数),正常情况下写成这样replace(i,"*"),但是这样只替换了 一次,到下次循环就没有被替换,所以需要加上替换的次数,想如果是次数,不可能直接写n吧,所以就可以用i的长度,意思是说,如果输入的敏感词汇与li中的词汇长度 想符合,就将全部替换成*. ret = ret.replace(i, "*" * len(i)) ,这里的变量名ret,如果变成其他名a,如果是a,当i等于苍老师时,被替换了的赋值给a,当i等于东京热的时候,也被 替换掉了,赋值给a,但第二次替换的时候是先替换,然后把值赋给a,相当于将前面一次a已经替换成***的覆盖了,覆盖了就等于没有被替换,所以需要将每次替换的* 保存在ret里面,下次循环的时候就不会再替换,而且还被保存了,所有当整个输入敏感词汇下来,就全部被替换掉.
6.算1-2+3-4...+99的和.
可以理解为把所有的偶数变成负数,就这样相加
#方法一:
su = 0 #设置总数变量 count = 1 #设置计数 while count < 100: if count % 2 == 0: #如果能被2整除的话就是偶数 su = su - count #就执行这个语句块, else: #如果不满足,就代表是奇数 su = su + count #就执行这个语句块, count += 1 #要循环就要每次count都要自加1
print(su)
理解:
第一次循环count = 1,1不能被2整除,执行else后面的语句,sum = sum + count 。sum =0+1.count 自加之后变成, count = 2,2<100.可以继续往下循环,走到if语句。2能被2 整除,则执行sum = sum - count , sum = (将原来sum的值算进来,sum = 0+1) - 2 ,所以sum最新的到的值就是 sum = 0+1-2.这样一直循环到count <100d的条件这样就可以了。 这里需要思考,题意会看到所有的偶数都是负数,所以在if判断的时候就要将减去count 的值。这种理解方式是将所有的偶数想成负数,这样自加自减。 """
#方法二:
su = 0 #设置总数变量 count = 0 #设置计数 while count < 100: if count % 2 == 1: #如果能被2整除的话就是偶数 su = su + count #就执行这个语句块, else: #如果不满足,就代表是奇数 su = su - count #就执行这个语句块, count += 1 print(su)
算2-3+4-5+6+100的和.
sum = 0
count = 2
while count < 101:
if count % 2 == 0:
sum = sum + count
else:
sum = sum - count
count += 1
print(sum)
代码基本一样,只是偶数相加奇数相减.
用for 循环去算1-2+3-4...+99的和
# su = 0 for i in range(1, 100): #把i当做count if i % 2 == 1: su = su + i else: su -= i print(su) #因为是for循环,所以不需要将之前的count +=1
7.使用while循环,实现输出100-50,从大道小,如100,99,98....,到50时再从0循环输出到50.然后结束。
# 方法1
s = 100 #定义变量s值为100
while s >= 50: #当s大于50,就输出s的值,从100开始算起走
print(s)
s-=1 #每输出一个就s减去一个
# continue
s = 0
while s <= 50: #当s <50输出的值就从0开始算起走
print(s)
s+=1 #每输出一个,count就加1
#方法2 count,times = 100,1 while True: #输出100到50 if count > 50: print(count) count-=1 elif count ==50 and times == 1: #当输出到50,跳转为0到50 print(count) times+=1 count = 0 elif count < 50: #输出0到50 print(count) count +=1
# 方法三: n = 100 while True: if n >=50: print(n) else: print(49-n) if n < 0: break n=n-1 #这个思路好简单明了,易懂。
8. 计算用户输入的内容中有几个整数如 content = input("请输入内容") 如:gghguhy123hgygyguy
content = input("请输入内容:") count = 0 for i in content: if i.isdigit(): count += 1 print(count)
9.实现一个整数加法计算器(俩个数相加)如: content = input("请输入内容:")如用户输入:5+9或者5 + 9 ,然后进行分割再进行计算
要把用户输入的数进行相加,应该怎么办
#首先要想啊,用户得到的数是不是就是赋给前面content的这个变量,所以是不是要将content这个得到的列表下标相加
#然后将加起来的值再重新赋给一个新的变量,最后打印新的变量就出来了
#假如赋值新的变量总和名字叫sum
#结果会发现是什么,如果用户输入1+2,得到的是12,这是把用户输入的当做是字符串进行拼接起来
# 记住input接收到的东西都是字符串,所以需要我们把接受到的的东西变成数字,怎么变
content = input("请输入内容:").split("+") nu = int(content[0]) + int(content[1])
print(nu)
input接受的数据全部默认是字符串类型
在写input后面,默认都要加上个strip()
9.有字符串"k :1|k1 :2|k2 :3|k3 :4" 处理成字典 {'k':1,'k1':2....}
思路:要将其转为字典,必须要把字符串中的 冒号和|去掉,然后转为列表,列表再转为字典
# li = "k :1|k1 :2|k2 :3|k3 :4" dic = {} #创建一个空字典 li = li.strip().split("|") #去空格,以| 将li分割成一个列表 for i in li: #循环列表 i = i.split(":") #将列表里的:去掉, dic[i[0]] = int(i[1]) #赋值根据dic["key"] = "value",key = i[0],value = i[1],题干是int类型,需转 print(dic) #打印字典
10.有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}
思路:要循环判断将以66为分界线,分别放入俩个列表
将列表转为字典
初始版本:
li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] dic = {} l1 = [] l2 = [] for i in li: if i <= 66: l1.append(i) else: l2.append(i) dic.update({"k1": l1}) #注意update的用法 dic.update({"k2": l2}) #还的分开加,这样加进去,有则覆盖,无则添加 print(dic)
简化版:
dic ={"k1": [], "k2": []} #直接创建一个字典模板,可以这样理解 for i in li: if i <= 66: #判断条件 dic["k1"].append(i) #满足条件的添加到字典k1 else: dic["k2"].append(i) #否则添加到字典k2 print(dic)
11.输出商品列表,用户输入序号,显示用户选中的商品商品 li = ["手机", "电脑", '鼠标垫', '游艇']
要求:1:页面显示 序号 + 商品名称,如:
1 手机
2 电脑
…
2: 用户输入选择的商品序号,然后打印商品名称
3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
4:用户输入Q或者q,退出程序
思路:
如果商品编号是以1开头的话那么.商品编码=1+索引 索引=商品编码-1
"循环列表而且要一直循环
"打印商品序列号 怎么才能打印序列号,索引会打是从来0开始算起走的,序列是从1开始算走的,序列=索引+1
"用户输入,用到input,输入之后怎么打印商品名称
"判断用户输入的是否的序列号,是否超出选择范围,错了宁提示
"如果用户选择q,就让程序退出
li = ["手机", "电脑", '鼠标垫', '游艇'] while True: for i in li: #循环 print("{} \t {}".format(li.index(i)+1, i)) #格式化输出,商品序列和名称 user_choice = input("请输入商品序列号:") .strip() #去空格,用户输入 if user_choice.isdigit(): #判断输入的是不是整数 user_choice = int(user_choice) #将判断的长度.变成整型,因为下一步,input接受到的都是str,需要将str转成int类型,. if user_choice > 0 and user_choice <= len(li): #判断输入的是否在商品范围内,写的时候就判断长度 print(li[user_choice-1]) #根据商品序列号打印商品 else: #否则就提示超出范围 print("你输入的超出商品范围!") elif user_choice.upper == "Q": #如果输入Q就退出程序,加这里,因为里面的循环都限定只能输入数字 break else: print("你输入的有非数字!") #如果不是整数,就提示输入的不是整数
12.将索引为奇数的元素删除
li = ["11", "22", "33", "44", "55", "66", "77", "88", "99"]
# 方法一,切片删除,第一种最可行 del li[1::2] print(li)
#方法二 ,通过新建列表 l1 = [] for i in range(len(li)): if i % 2 == 0: l1.append(li[i]) li = l1 # li.extend(l1) print(l1)
#方法三,倒着删除 for i in range(len(li)-1, -1, -1): if i % 2 == 0: del li[i] print(li) #三次结果不一样,不建议在循环里删除列表里的元素
13."基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
name = "alex" password = "123" count = 0 flag = True while flag and count < 3: #同时让程序运行并且设置 count的次数小于3 user_name = input("请输入你的用户名:").strip() user_password = input("请输入你的密码").strip() if user_name == name and user_password == password: #判断输入的是否与之前保存的是否一样 print("欢迎登陆") flag = False #当满足条件了,即输入都正确,就可以退出循环 else: #否则不满足,就执行下面的语句 print("用户名或者密码错误!还剩%s机会" % (2-count)) #提示用户输错了 count += 1 #在while循环里,输错的情况下,让count+1,前面设置了count不能大于3次时相互呼应。 if count == 3: choice = input("还想再试试吗!请输入Y") if choice == "Y": count = 0 else: print("还要不要脸了") count = 0
#用while循环做的最初级版本,支持多用户. users = [["alex", "123"], ["luffy", "abc123"]] count = 0 #设置计数 while count < 3: #循环计数次数 _username = input("请输入你的用户名:").strip() #去掉空格 _password = input("请输入你的密码:").strip() for user_item in users: #循环列表取出他的值 if user_item[0] == _username and user_item[1] == _password: #设置条件,如果成立 print("welcome %s" % _username) #则打印欢迎登陆 exit() #成功就结束本次循环 count += 1 #在for循环下计数次数加上1,知道加到计数设置的3次为止 else: #当for循环完成后,还是不成立之后,就执行否则下面的语句 print("密码错误")
#用标志位做,支持多用户.
exit_flag = False
users = [["alex", "123"], ["luffy", "abc123"], ]
count = 0
while count < 3:
_username = input("请输入你的用户名:").strip()
_password = input("请输入你的密码:").strip()
for user_item in users:
if user_item[0] == _username and user_item[1] == _password:
print("welcome %s" % _username)
exit_lag = True
break
else:
print("洗洗睡")
if exit_flag:
count += 1
14.关于倒叙输出的方法:
#输出100-1的数
#方法一
for j in range(100,0,-1): print(j)
a = range(100) #给range 赋值给一个变量a for k in reversed(a): #利用关键字reversed进行原地翻转 print(k)
#用while循环实现
count = 100 while count >= 50: print(count) count-=1# 倒序输出还可以用-=符号来进行表示
15.输出所有1-100的奇数的和
#理解,要先把奇数摘出来,然后把奇数相加
# 方法一:是要从来1循环到100,来判断是奇数还是偶数,比较麻烦。
count = 0
sum = 0
while count < 100: #设置count的范围
if count % 2 == 1: #判断count是不是能被2整除,不能整除就是余1,即为奇数
sum = sum + count #每次count+1的值,又重新加上sum的值,记住sum的值不是0+1=1这样算的。而是
count += 1 #当count = 1时sum = 0+1,当count = 2时是偶数,程序不执行,往下走,count = 3是奇数,sum = (0+1)+3.这样循环的
print(sum) # 最后再打印sum总的值,注意缩进
#返回:2500
#方法二: count = 1#设置计数初始值为0, sum = 0 #设置自加的变量初始值为0,同时也是每次得到的总和 while count < 100: #设置count的最大范围。 if count % 2 == 1:#判断countde 的数,是不是能被2整除,不能就说明该数是奇数 sum = sum + count #将count每次加到的数,与每次sum得到的数,相加,又重新得到一个新的sum数, # 到下一轮,将sum的数又加进去,相当于sum是一个自加的过程, count += 2 #!!!!!!这里将count每次循环到这里每次都加上个2,就不用判断count的到的数,去判断是不是奇偶数。 print(sum) # #这样理解,如果 count= 0,执行到if count % 2 == 1:因为0可以被2整除。然后就不会执行sum = sum + count ,直接加到2, # 有能被整除,sum = sum + count,所以又能被整除,所以一直循环加23,一直出不来结果. #返回:2500
16.计算用户输入内容中,索引为奇数.并且对应的元素为数字 的个数(没有则个数为零)
count = 0 content = input(">>>").strip() for i in range(len(content)): #len 就是他的个数,比如输入的字符是三个字的,range是从0开始,因为range是不包括最后一个的,len以下是3他取不到,所以i呈现出来的就是content的索引 if i % 2 == 1 and content[i].isdigit(): count += 1 print(count)
"""理解: 计算用户输入为偶数,并且元素为整数,统计他输入满足条件后,总共输入了几次 先说输入内容,的用input 明确循环之后i就是索引 判断,注意并且就是要用到and 就需要判断 ,索引为奇数.and i的元素为数字 通过i 怎么找元素,i就是他的索引,怎么通过索引找元素 索引是下标[0],[1], 比如,li = [1.2.6.8.7.] li[1] 就是元素2 i 就等于他的索引.那么就是content[i] """
方法二
count = 0
content = input(">>>").strip() for i in range(1, len(content), 2):
if content[i].isdigit():
count += 1
print(count)
#为什么可以这样呢,range(1, len(content), 2)在i取值的时候就是1,3,5,7,9...酱紫取的,
步长跳着去,就直接把偶数去掉,或者跳过了,所以不用去判断是否是奇偶数.
17.price的计算价格
计算一种价格的总和
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}
]
sum = 0
for x in goods:
sum1 = x["price"]
sum = sum1 + sum
print(sum)
#一行代码解决
print(sum([x["price"]for x in goods]))
18.文件a.txt内容:每一行内容分别为商品名字,价钱,个数。并计算出总价钱
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
通过代码,将其构建成这种数据类型:
[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 。
计算价格和个数的总和.
li = [] with open("log2", encoding="utf-8", mode="r")as f: #先创建文件,然后读取出来 for i in f: #循环,i就是每一行的值,比如: mac 3000 2 l2 = i.split() #将i分成一个列表,可以将i.split()赋值给一个变量,如l2 dic1 = {"name": l2[0], "price": l2[1], "amount": l2[2]} #构建字典模式 li.append(dic1) #将字典添加到列表 ,下面就想怎么将全部价格打印出来 sum = 0 #设置一个计数 for j in li: #循环这个列表 sum1 = int(j['price']) * int(j['amount']) #将价格和个数相乘发,等于一个新的变量 sum = sum +sum1 #和计数进行自加行为,得出结果 print(sum)