python习题

80 阅读4分钟

1.输入:请输入一个0和1组成的二进制的字符串: 1101
把它转换成10进制 输出:13 解题思想:使用while 循环,每次从二进制字符串中取出第一位字符,使用 int() 函数将当前位的字符 '0' 或 '1' 转换为整数,然后将其乘以2并加上上一次的结果。最后得到的 d 就是转换后的十进制数字。

s = input("请输入一个由1和0组成二进制字符串:")
d = 0
while s:
    d = d * 2 + int(s[0])
    s = s[1:]
print(f"转换成十进制的数:{d}")

输出: image.png 2.将字符串"你好"转换成字节,再将转换字节转成字符串(使用两种方式实现)

# 方法1:使用encode编码,使用decode解码
str_data = "你好"
str_data1 = str_data.encode("GBK")
str_data2 = str_data1.decode("GBK")
print("原字符串:", str_data)
print("转换成字节后:", str_data1)
print("再转回字符串后:", str_data2)

# 方法2:
str_data = "你好"
str_data1 = bytes(str_data, "GBK")
str_data2 = str(str_data1, "GBK")
print("原字符串:", str_data)
print("转换成字节后:", str_data1)
print("再转回字符串后:", str_data2)

输出: image.png 3.异常处理: 遇到分母为0异常,执行打印异常信息: Division by zero 遇到字典元素键异常,执行为打印异常信息,不存在此键遇到序列索引异常,执行打印:索引超出范围 若没有遇到异常,打印: Normal 无论异常或正常,打印: Einallv 注意:需要模拟出异常,并验证异常处理是否能完成上面提到的情况

try:
    # 模拟分母为0异常
    1 / 0
    # 模拟键值异常
    # I= [1, 2, 3]
    # value = I[4]
    # 模拟字典元素键异常
    d = {"key": "value"}
    value = d["nonexistent_key"]
except ZeroDivisionError:
    print("Division by zero")
except KeyError:
    print("Keys does not exits")
except IndexError:
    print("Index out of range")
else:
    print("Normal")
finally:
    print("Finally")

输出:

  • 模拟分母为0异常image.png
  • 模拟序列索引异常image.png
  • 模拟字典元素异常image.png
  • 遇到没有异常image.png

4.题目: image.png 解题思想:我们首先定义了一个列表,其中包含了三个字典,每个字典代表一个学生的信息。然后,我们使用print函数打印了表头,使用format方法来控制输出格式。接下来,我们使用一个循环遍历学生列表,对于每个学生,我们从字典中提取姓名、学号、分数等信息,并使用format方法来打印这些信息,每个学生的信息都单独占据一行,并且居中对齐。

# 方法1使用format输出:
print_list = [
    {"name": "zhangsan", "stu_id": "04101041", "score": [90, 80, 100]},
    {"name": "lisi", "stu_id": "04101042", "score": [70, 80, 90]},
    {"name": "wangwu", "stu_id": "04101043", "score": [76, 90, 80]}
]
# 打印表头
print("{:^10s}{:^10s}{:^10s}{:^10s}{:^10s}".format("stu id", "name", "Chinese", "Math", "English"))
# 遍历列表,逐个输出每个学生的信息
for i in print_list:
    name = i["name"]
    stu_id = i["stu_id"]
    scores = i["score"]
    chinese_score = scores[0]
    math_score = scores[1]
    english_score = scores[2]
    # 打印每个学生的信息
    print("{:^10s}{:^10s}{:^10d}{:^10d}{:^10d}".format(stu_id, name, chinese_score, math_score, english_score))
# 方法2:
print_list = [
    {"name": "zhangsan", "stu id": "04101041", "score": [90, 80, 100]},
    {"name": "lisi", "stu id": "04101042", "score": [70, 80, 90]},
    {"name": "wangwu", "stu id": "04101043", "score": [76, 90, 80]}
]
# 打印表头
print(f"{'stu id':^10s}{'name':^10s}{'Chinese':^10s}{'Math':^10s}{'English':^10s}")
# 遍历列表,逐个输出每个学生的信息
for student in print_list:
    name = student["name"]
    stu_id = student["stu id"]
    chinese_score, math_score, english_score = student["score"]
    # 打印每个学生的信息
    print(f"{stu_id:^10s}{name:^10s}{chinese_score:^10d}{math_score:^10d}{english_score:^10d}")

输出:image.png 5.给你一个整数列表:例如:int list = [2,7,11,15],目标为9 要求打印出列表中两个元素相加之后结果等于9的元素以及下标(选做) 解题思想:首先,定义一个整数列表int_list和一个目标值sum_num使用,接下来使用for循环遍历列表中的每个元素,并计算目标值和当前元素之间的差值。如果差值在列表中,则说明找到了两个元素相加等于目标值的情况,打印出这两个元素的值和下标即可。其中,使用enumerate函数获取当前元素的下标i,使用index方法获取差值

int_list = [2, 7, 11, 15]
sum_num = 9

# 遍历列表中的每个元素
for i, num1 in enumerate(int_list):
    # 计算差值
    num2 = sum_num - num1
    # 判断差值是否在列表中
    if num2 in int_list:
        # 如果在列表中,打印出相加等于目标值的两个元素的值和下标
        j = int_list.index(num2)
        print("第一个元素:{},下标:{},第二个元素:{},下标:{},和为:{}".format(num1, i, num2, j, num1 + num2))

输出: image.png