习题练习

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("{} 	 {}".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)





原文地址:https://www.cnblogs.com/sunny7/p/8734362.html