西南科技大学Python实验测试一、二

测试一

第一题

通过键盘输入系列整数值,输入0表示结束,程序筛选并输出其中的素数。
要求:程序中应该包含有对输入非法数据(小数、非数值数据)的限制,当用户输入不合法时做提示。

# -*- coding:utf-8 -*-
# Author : ZhangPeng
# Data : 2019/10/16 14:05
import math
def sushu(a):
    flag = True
    if a > 2:
        for i in range(2, int(math.sqrt(a)) + 2):
            if a % i == 0:
                flag = False
                break
    elif a == 2:
        return flag
    else:
        flag = False
    return flag
if __name__ == "__main__":
    li = []
    while True:
        a = input("请输入一个正整数,输入0则结束输入:")
        if a.isnumeric():
            if eval(a) == 0:
                break
            if sushu(eval(a)):
                li.append(eval(a))
            continue
        else:
            print("输入非法,请重新输入!")
    li=set(li)
    li=list(li)
    print("您输入的正整数中,属于素数的有:{}".format(li))

第二题

从键盘输入一串字符,统计输出出现次数最多的前3个字符及次数,并输出总共出现了多少种字符。

# -*- coding:utf-8 -*-
# Author : ZhangPeng
# Data : 2019/10/16 14:36
if __name__ == "__main__":
    st = input("请输入一串字符,输入完毕按回车键:")
    counts = {}
    for i in st:
        counts[i] = counts.get(i, 0) + 1
    counts = list(counts.items())
    counts.sort(key=lambda x: x[1], reverse=True)
    print("出现次数最多的前三个字符如下:")
    for i in range(3):
        print("字符:{0:<10} 出现次数:{1:<5}".format(counts[i][0], counts[i][1]))
    zl = 0
    for i in counts:
        zl = zl + 1
    print("一共输入了{}种字符!".format(zl))

测试二

一、题目1

编写程序完善下面3个函数,完成从data1.txt文件中读取数据,用其中的数字组成互不相同的三位数(个位、十位、百位数字可以重复),并将生成的三位数数目和所有生成的三位数用‘,’分隔后追加到data1.txt文件末尾。
def getData(name):name是读取的文件名称,函数返回一个列表,包含解析出来的数字;
def genNumber(data):data是getData返回的数字列表,函数返回一个列表,包含生成的互不相同的三位数按照升序排列;
def saveData(name,data):name是写入的文件名称,data是genNumber产生的三位数列表,函数将data中的三位数数量和所有三位数用‘,’分隔后追加到‘name’指定文件末尾。
输出文件示例:
在这里插入图片描述

# -*- coding:utf-8 -*-
# Author : ZhangPeng
# Data : 2019/10/25 19:03

#获取数据,返回升序列表
def getData(name):
    dat = []
    op = open(name, "r", encoding='utf-8')
    txt = op.readline()
    dat += str(txt)[0:7].split("$")
    txt = op.readline()
    dat += str(txt)[0:7].split("*")
    dat = sorted(dat)
    op.close()
    return dat

#三位数字组合,返回列表保存的升序的数字组合
def genNumber(data):
    dat = []
    for i in range(0, 7):
        for j in range(0, 7):
            for k in range(0, 7):
                num = int(data[i] + data[j] + data[k])
                dat.append(num)
    return dat

#保存数据
def saveData(name, data):
    count = 0
    strd = ""
    for i in data:
        count += 1
        if count == 1:
            strd += str(i)
        else:
            strd += "," + str(i)
    op = open(name, "a+", encoding='utf-8')
    tota = "total:" + str(count) + "\n"
    op.write(tota)
    op.write(strd + "\n")
    op.close()


if __name__ == "__main__":
    Data = getData("data1.txt")
    Number = genNumber(Data)
    saveData("data1.txt", Number)

二、题目2

请编写程序完成如下的功能,要求每个子功能模块都对应一个函数来实现。
程序读取源文件路径下的 contact.txt文件,若没有就创建一个。文件内容存储格式为“姓名:电话号码”,每人仅允许一个电话号码。程序提示用户如下操作信息。(提示:字典的存取可以通过json库的loads和dumps方法进行字符串转换)
‘’’
|-----欢迎进入通讯录-----|
|—1、查询联系人信息—|
|—2、插入新的联系人—|
|—3、删除联系人信息—|
|—4、退出通讯录程序—|
‘’’
接收用户的操作指令并进行对应操作,如果用户输入不合法,则提示“输入指令不合法。”
查询联系人:提示信息“请输入联系人姓名:”,并接收输入姓名,查询当前通讯录里面的联系人信息,若联系人存在,则输出联系人信息“姓名:联系电话”,若不存在,则提示信息“联系人不存在。”;
插入联系人:提示信息“请输入插入联系人姓名:”,并接收输入姓名,若联系人已经存在,则提示“联系人已经存在。”若不存在,则提示“联系人不存在。请输入电话:”,接收输入电话进行插入,并提示信息“联系人插入成功。”
删除联系人:提示信息“请输入删除联系人姓名:”,并接收输入姓名,若联系人不存在,则提示“联系人不存在。”,若联系人存在,则删除通讯录中的联系人信息,并提示“联系人删除成功。”
退出通讯录:提示信息“谢谢你的使用。”,并存储通讯录到contact.txt中,并退出程序。

# -*- coding:utf-8 -*-
# Author : ZhangPeng
# Data : 2019/10/25 20:15
# 电话号码格式(一行存储,末尾没有回车(\n)),数据格式如下:
# 张鹏:17777353550,罡哥:17777353550


# 读取数据,返回号码字典,setnumber["姓名"]=="号码"
def readData(fname="contact.txt", op="a+"):
    dat = []
    op = open(fname, op, encoding='utf-8')
    op.seek(0)
    txt = op.readline()
    if not txt:
        return {}
    dat = txt.split(",")
    setnumber = {}
    for peo in dat:
        peo = str(peo).split(":")
        setnumber[peo[0]] = peo[1]
    op.close()
    return setnumber


# 保存数据,接接收数据为列表,列表里面的数据为对象:[("张鹏":"17777353550")]
def saveDate(data, fname="contact.txt", op="w+"):
    isfirst = True
    strd = ""
    for peo in data:
        if isfirst:
            strd += str(peo[0] + ":" + peo[1])
            isfirst = False
        else:
            strd += "," + str(peo[0] + ":" + peo[1])
    op = open(fname, op, encoding='utf-8')
    op.write(strd)
    op.close()


# 根据姓名查询号码
def selectNumber(pname):
    setnumber = readData()
    if pname in setnumber.keys():
        print(pname + ":" + setnumber[pname])
    else:
        print("联系人不存在。")


# 插入号码
def inserNumber(name):
    setnumber = readData()
    if name in setnumber:
        print("联系人已存在。")
    else:
        number = input("联系人不存在。请输入电话:")
        setnumber[name] = number
        saveDate(list(setnumber.items()))


# 删除号码
def delNumber(name):
    setnumber = readData()
    if name in setnumber:
        del setnumber[name]
        saveDate(list(setnumber.items()))
        print("号码删除成功!")
    else:
        print("联系人不存在。")


def menu():
    print("|---1、查询联系人信息---|")
    print("|---2、插入新的联系人---|")
    print("|---3、删除联系人信息---|")
    print("|---4、退出通讯录程序---|")


def welcome():
    print("|-----欢迎进入通讯录-----|")


def control():
    while True:
        menu()
        num = input("请输入你想要的操作序号,如查询则输入1然后回车:")
        jug = ["1", "2", "3", "4"]
        if num in jug:
            if num == "1":
                name = input("请输入联系人姓名:")
                selectNumber(name)
            elif num == "2":
                name = input("请输入插入联系人姓名:")
                inserNumber(name)
            elif num == "3":
                name = input("请输入删除联系人姓名:")
                delNumber(name)
            else:
                exit(0)
        else:
            print("输入错误,请重新输入:")


if __name__ == "__main__":
    welcome()
    control()
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值