python 实验2

T1

用列表实现杨辉三角前10行的输出

设计思路:此题相当于采用一维数据来输出一个二维数组。要输出多少行,则表示要循环多少次。根据杨辉三角的特点,首先在列表的最后追加一个元素,且该元素值恒为1是求二个元素到倒数第2个元素的值上面的杨辉三角可以总结出一个规律,即当前元素的新值为该元素的原值与前一个元素值的和。最后输出该列表。如此反复,即可按要求输杨辉三角形。

rows = 10
x = []
for i in range(rows):
    x.append(1)#在列表尾部添加一个值为1的元素
    for j in range(i-1, 0, -1):#从倒数第二个元素到第二个元素,
                               #左闭又开,下表索引不包含0,所以终点是第2个元素
        x[j] = x[j] + x[j-1]#当前元素的新值为该元素的原值与前一个元素值的和
    print(x[:i+1])#打印出每行

最终效果: 

 

T2 

题目:

编写小学生算术能力测试系统用来帮助小学生进行百以内的算术练习,它具有以下功能:

(1)提供10道加、减、乘或除四种基本算术运算的题目:

(2)练习者根据显示的题目输入自己的答案;

(3) 程序自动判断输入的答案是否正确并显示出相应的信息;

 (4)结束时要求输出总答题数、正确题数以及正确率。

进一步完善该程序,主要需解决以下几个方面的问题:

问题一:两数相加时,结果要求仍旧为两位数;

问题二:两数相减,结果不能为负数;

问题三:两数相乘时,只能是两位数乘以一位数;

问题四:两数相除时,必须能整除,不能出现余数。

代码: 

import random
def add():
        a = random.randint(0, 100)
        b = random.randint(0, 100-a)
        return a, b, '+'

def sub():
        a = random.randint(0, 100)
        b = random.randint(0, a)
        return a, b, '-'


def mult():
    while True:
        a = random.randint(10, 100)
        b = random.randint(1, 9)
        if a*b<100:
            return a, b, '*'


def div():
    while True:
        a = random.randint(0,99) 
        x=[]
        for i in range(1,a+1):
            if(a%i)==0:
                x.append(i)
        b = random.choice(x)
        if a % b == 0:
            return a, b, '/'

def get_user_answer():
    return int(input('请输入答案:'))


def check_answer(a, b, op, user_answer):
    if op == '+':
        return user_answer == a + b
    elif op == '-':
        return user_answer == a - b
    elif op == '*':
        return user_answer == a * b
    elif op == '/':
        return user_answer == a // b

total = 0
correct = 0


while True:
    problem_generators = [add, sub, mult, div]
    generator = random.choice(problem_generators)
    a, b, op = generator()

    print(f'{a} {op} {b} = ')
    user_answer = get_user_answer()

    if check_answer(a, b, op, user_answer):
        print('回答正确!')
        correct += 1
    else:
        print('回答错误!')
        

    total += 1
    if total == 10:
        break

print(f'总答题数:{total},正确题数:{correct},正确率:{correct / total *100}%')

最终效果:

 

T3

题目:

分页显示用户信息字典的内容。

(1)通过for 循环创建301条数据,数据类型不限,如:
     user1  email-1   pwd1

     user2  email-2   pwd2

(2)提示用户“请输人要查看的页码”, 当用户输人指定页码时, 显示指定数据。

    - 每页显示10条数据

    - 用户输入页码是非十进制数字,则提示输人内容格式错误

思路:生成随机密码(首先生成一个由不同大小写字母、数字、特殊字符组成的字符串,通过random.choice()对字符串进行随机选择,生成随机密码),再构造键为用户名,值为基本信息(包括邮箱、密码)的字典来存储用户信息。在选择时使用start和end限制读取的范围,即读取的页码内所含的内容。

 这里生成随机密码的技巧,一定要看一下

import random
import string

# 生成随机密码
def random_password():
    chars = string.ascii_letters + string.digits + string.punctuation
    return ''.join(random.choice(chars) for i in range(8))


users = {}
for i in range(0, 302):
    username = f"user{i}"
    email = f"email-{i}@outlook.com"
    password = random_password()
    users[username] = {"email": email, "password": password}

while True:
    try:
        page = int(input("请输入要查看的页码: "))
        if page < 1 or page > 31:
            print("输入的页码超出范围,请输入1-31之间的数字。")
            continue
        start = (page - 1) * 10
        end = page * 10
        print(f"第{page}页数据如下:")
        for i, (username, info) in enumerate(users.items()):
            if i < start:
                continue
            elif i >= end:
                break
            email = info["email"]
            password = info["password"]
            print(f"{username}\t{email}\t{password}")
        break
    except ValueError:
        print("页码格式不正确,请输入数字。")

T4

编写函数myfunc(x,n), 求n项式s=x+xx+xxx+…+xx…x的和,并返回求出的和。其中,x是1~9的数字,最后一项是n位都是x的数字。

例如:输人:x=2, n=6 输出: 246912。

#这里是先将x转换成字符串格式,利用字符串的*操作获得xx、xxx.......,
#再转化成整数,求和
def myfunc(x, n):
    x_str = str(x)
    result = 0
    for i in range(1, n+1):
        str1 = x_str * i
        result += int(str1)
    return result


myfunc(8,5)

 T5

将生成的九九乘法口诀表写入到文件“乘法口诀表.txt”中

 代码

#将整个乘法口诀表先整个放入一个字符串中,再一次性写入文件
table = ""
for i in range(1, 10):
    for j in range(1, i+1):
        table += f"{i} × {j} = {i*j}\t"
    table+="\n"


with open("乘法口诀表.txt", "w") as file:
    file.write(table)

T6

画图,对matplotlib的练习

import matplotlib 
from matplotlib import pyplot as plt
matplotlib.rcParams['font.family']='SimHei'

x = []
for i in range(1,32):
    x.append(str(i)+"日")
lst_temp3=[10,16,17,14,12,10,12,6,6,7,8,9,12, 15, 15, 17,18,21,16,16,20,13,    
                    15,15,15,18,20,22,22,22,24]
lst_temp10=[26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,
                     15,5,13,17,10,11,13,12,13,6]

plt.figure(figsize=(20,10))
plt.title("某市2019年3月份和10月份的气温变化趋势图")
plt.xlabel("日期")
plt.ylabel("温度/℃")
plt.xticks(range(0,32,1))
plt.yticks(range(0,32,1))
plt.grid()
plt.xticks(rotation=40)
plt.plot(x,lst_temp3)
plt.plot(x,lst_temp10)
plt.legend(labels=['3月','10月'],loc='upper right')
plt.show()

 效果

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值