练习题_数据类型2(Python)

博客围绕Python数据类型展开,包含多个代码练习。有统计字符串中字符及其个数的实现,涉及列表和字典;有循环提示用户输入并追加到列表的操作;还有对列表元素按大小分类存入字典,以及使用集合对经理和技术员列表进行计算等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.写一个代码片段统计一个字符串中出现的字符及其个数。(至少2种方式:分别使用列表和字典来实现)

例如对于字符串“abcaaabcd”,统计的结果是:a(4个)b(2个)c(2个)d(1个)

2.循环提示用户输入,并将输入内容追加到列表中(如果输入N或n则停止循环),输入结束打印列表

如果用户输入的信息已经存在,则提示用户所输内容已存在,不再重复添加。

提示:对于输入内容,需要考虑大小写和空格的情况

3.有如下值 li= [11,22,33,44,55,66,77,88,99,90] ,将所有大于 66 的值保存至字典的第一个key对应的列表中,将小于 66 的值保存至第二个key对应的列表中。打印输出result。

result = {‘k1’:[],‘k2’:[]}

4.经理:[曹操,刘备,孙权]。 技术员:[曹操,刘备,张飞,关羽]。

使用两个列表分别存储经理与技术员。

使用集合计算:

(1) 即是经理也是技术员的有谁?

(2) 是经理,但不是技术员都有谁?

(3) 是技术员,但不是经理都有谁?

(4)张飞是经理吗?

(5) 身兼一职的都有谁?

(6) 经理和技术员共有几个人?

【综合练习】

现有商品列表如下:

   1. products =  [["iphone",6888],["MacPro",14800],["小米6",2499],["Coffee",31],["Book",60],["Nike",699]],需打印出以下格式:
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
2.	提示用户输入预算,并在每次购买时查看余额是否充足。不足时,提示“余额不足”。

3.	根据上面的products列表写一个循环,不断询问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里,最终用户输入q退出时,打印购买的商品列表。
4.	购买结束时,输出全部购买产品的编码、名称、单价和数量,并在最后集中显示“总计”和“余额”
例如:
请输入您的预算:10000
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
请选择您要购买的商品编码:1
您的余额不足。
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
请选择您要购买的商品编码:0
已将iphone放入购物车。
------  商品列表 ------
0  iphone    6888
1  MacPro    14800
2  小米6      2499
3  Coffee    31
4  Book      60
5  Nike      699
请选择您要购买的商品编码:q
------  购物清单 ------
编码	   商品名称   单价   数量	
0  		iphone    6888	 1
----------------------------
总计                   6888元
余额                   3112元
感谢您的惠顾。
# @Time:2020/12/16 14:39
# @Author:李 祥
# @File:task5.py
# @Software:PyCharm

# 1.写一个代码片段统计一个字符串中出现的字符及其个数。(至少2种方式:分别使用列表和字典来实现)
# 方法一:
# str1 = input("请输入你要计算的字符串:")
# list1 = list(str1)
# set1 = set(list1)
# for i in set1:
#     print(f"{i}:{list1.count(i)}")

# 方法二:
# str1 = input("请输入你要计算的字符串:")
# res = {}
# for i in str1:
#     if i in res:
#         res[i] += 1
#     else:
#         res[i] = 1
# print(res)

# 2.循环提示用户输入,并将输入内容追加到列表中(如果输入N或n则停止循环),输入结束打印列表
# list1 = []
# while True:
#     str1 = input("请输入内容:")
#     if str1 in ["n", "N"]:
#         break
#     elif str1 in list1:
#         print("输入内容重复")
#     else:
#         list1.append(str1)
# print(list1)

# 3.有如下值 li= [11,22,33,44,55,66,77,88,99,90] ,将所有大于 66 的值保存至字典的第一个key对应的列表中,将小于 66 的值保存至第二个key对应的列表中。打印输出result。
# list1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
# result = {'k1': [], 'k2': []}
# for i in list1:
#     if i > 66:
#         result['k1'].append(i)
#     elif i < 66:
#         result['k2'].append(i)
# print(result)

"""
4.经理:[曹操,刘备,孙权]。 技术员:[曹操,刘备,张飞,关羽]。
  使用两个列表分别存储经理与技术员。
  使用集合计算:
(1) 即是经理也是技术员的有谁?
(2) 是经理,但不是技术员都有谁?
(3) 是技术员,但不是经理都有谁?
(4)张飞是经理吗?
(5) 身兼一职的都有谁?
(6) 经理和技术员共有几个人?
"""
# list1 = ["曹操", "刘备", "孙权"]
# list2 = ["曹操", "刘备", "张飞", "关羽"]
# print("(1)", set(list1) & set(list2))
# print("(2)", set(list1) - (set(list1) & set(list2)))
# print("(3)", set(list2) - (set(list1) & set(list2)))
# print("(4)张飞是经理") if "张飞" in list1 else print("(4)张飞不是经理")
# print("(5)", set(list1) ^ set(list2))
# print("(6)", len(set(list1) | set(list2)))

# 综合练习
products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]]
money = input("请输入你的预算:")
print("商品列表".center(30, "-"))
for i in range(len(products)):
    print(i, end="  ")
    print(f"{products[i][0]:<10}", end="")
    print(f"{products[i][1]:<6}")
list1 = []
list2 = []
total = 0
while True:
    str1 = input("想购买什么(商品编号):")
    if str1 == "q":
        break
    else:
        if eval(money) - products[eval(str1)][1] <= total:
            print("余额不足")
        else:
            list1.append(products[eval(str1)])
            list2.append(products[eval(str1)][0])
            print(f"已将{products[eval(str1)][0]}放入购物车")
            total += products[eval(str1)][1]
dict1 = dict(list1)

print("购物车".center(30, "-"))
print("编码 商品        单价  数量")
for i, j in enumerate(dict1.keys()):
    print(i, end="   ")
    print(f"{j:<10}", end="")
    print(f"{dict1[j]:>6}", end="    ")
    print(list2.count(str(j)))

print("-" * 30)
print("总价", f"{total:>30}")
if eval(money) - total < 0:
    print("您的余额不足。")
else:
    print("余额", f"{(eval(money) - total):>30}")

### Python 数据类型练习题及答案 以下是几个关于 Python 数据类型的经典练习题及其详细解答,涵盖字符串、列表、字典等常见数据类型的使用。 #### 1. 字符串操作 **题目:** 给定一个字符串 `s = "Python is good"`,完成以下任务: - 将字符串中的第一个字符替换为大写的 `'Y'`。 - 提取子字符串 `"hon is "`。 - 将整个字符串转换为全小写形式。 - 替换字符串中的 `'o'` 为 `'0'`。 **答案:** - 第一步可以通过切片和拼接实现:`'Y' + s[1:]` 结果为 `'Yython is good'`。 - 提取子字符串可以使用切片:`s[3:11]` 结果为 `'hon is '`。 - 转换为小写可以直接调用 `.lower()` 方法:`s.lower()` 结果为 `'python is good'`。 - 替换字符可以使用 `.replace()` 方法:`s.replace('o', '0')` 结果为 `'Pyth0n is g00d'` [^1]。 #### 2. 列表操作 **题目:** 创建一个列表 `my_list = [1, 2, 3, 4, 5]`,然后执行以下操作: - 在列表末尾添加数字 `6`。 - 删除索引位置为 `2` 的元素。 - 反转列表顺序。 **答案:** - 添加元素可以使用 `.append()` 方法:`my_list.append(6)`,此时列表变为 `[1, 2, 3, 4, 5, 6]`。 - 删除指定索引的元素可以使用 `del` 或 `.pop()`:`del my_list[2]`,此时列表变为 `[1, 2, 4, 5, 6]`。 - 反转列表可以直接调用 `.reverse()` 方法:`my_list.reverse()`,最终列表变为 `[6, 5, 4, 2, 1]` [^1]。 #### 3. 字典操作 **题目:** 编写一段代码,统计用户输入的一句话中每个单词出现的次数,并按字母顺序输出结果。 **答案:** ```python words_dict = {} sentence = input("请输入一句话:") words_list = sentence.split() for word in words_list: count = words_list.count(word) words_dict[word] = count sorted_words = sorted(words_dict.items()) for word, count in sorted_words: print(f"{word} {count}") ``` 这段代码首先通过 `input()` 获取用户输入,接着使用 `.split()` 分割成单词列表。之后遍历列表统计每个单词的出现次数并存储在字典中。最后将字典按键排序,并逐项打印出单词及其计数 [^2]。 #### 4. 集合操作 **题目:** 给定两个集合 `set_a = {1, 2, 3}` 和 `set_b = {3, 4, 5}`,求它们的交集、并集以及差集。 **答案:** - 交集可以通过 `.intersection()` 方法或运算符 `&` 实现:`set_a & set_b` 结果为 `{3}`。 - 并集可以通过 `.union()` 方法或运算符 `|` 实现:`set_a | set_b` 结果为 `{1, 2, 3, 4, 5}`。 - 差集可以通过 `.difference()` 方法或运算符 `-` 实现:`set_a - set_b` 结果为 `{1, 2}` [^1]。 #### 5. 元组操作 **题目:** 创建一个元组 `t = (1, 2, 3)`,尝试修改其中的某个元素值会发生什么? **答案:** 由于元组是不可变的数据结构,因此直接尝试修改元组中的某个元素会引发 `TypeError` 异常。例如,如果执行 `t[0] = 4`,程序会抛出错误提示“'tuple' object does not support item assignment” [^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值