矿大python学习通实验4-2

这篇具有很好参考价值的文章主要介绍了矿大python学习通实验4-2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

"""文章来源地址https://www.toymoban.com/news/detail-857638.html

1.实验4-6 编写程序,求出1~n之间(包含1和n,n是小于等于1000的正整数,

从键盘输入)的所有完数。所谓完数,是指一个数恰好等于它的所有因子(包括1但不包括本身)之和。

例如,6的因子为1、2、3,6=1+2+3,因而6是完数。

要求:一行输出一个完数。

【运行示例】

输入:1000

输出:

6

28

496

"""

def perfectNum(n):

    # 初始化一个空列表,用于存储完数

    perfect_numbers = []

    for num in range(1, n+1):

        factorsSum = 0

        for i in range(1, num):

            # 如果i是num的因子(即num能被i整除)

            if num % i == 0:

                factorsSum += i

        # 如果因子之和等于num,说明num是完数,将其添加到完数列表中

        if factorsSum == num:

            perfect_numbers.append(num)

    # 返回包含所有完数的列表(关键)

    return perfect_numbers

n = int(input())

if 1 <= n <= 1000:

    # 隔行打印出列表中所有完数

    for perfect_number in perfectNum(n):

        print(perfect_number)

# or

n = int(input())

if 1 <= n <= 1000:

    for num in range(1, n+1):

        sumFactors = 0

        for i in range(1, num):

            if num % i == 0:

                sumFactors += i

        if sumFactors == num:

            print(num)

"""

2.实验4-7 编写程序,找出1~n之间(包含1和n,n是小于等于1000的正整数,

从键盘输入)的全部同构数。所谓同构数,是这样一种数,它出现在它的平方数的右端。

例如,5的平方是25,5是25右端的数,5就是同构数,25也是一个同构数,其平方是625。

要求:一行输出一个同构数。

【运行示例】

输入:1000

输出:

1

5

6

25

76

376

625

"""

def is_isomo(n):

    # 核心部分

    """

    表达式 str(n*n)[-len(str(n)):] == str(n) 用于检查一个数 n 是否是同构数。

    -len(str(n)):从 n 的平方的字符串表示的末尾向前数 len(str(n)) 个字符的位置,

    len(str(n))表示n的位数。这个操作是为了截取平方数中与原始数 n 相同长度的部分。

    str(n*n)[-len(str(n))]:获取 n 的平方的字符串表示中最后 len(str(n)) 个字符。

    """

    return str(n*n)[-len(str(n)):] == str(n)

n = int(input())

if 1 <= n <= 1000:

    for i in range(1,n + 1):

        if is_isomo(i):

            print(i)

# or

n = int(input())

if 1 <= n <= 1000:

    for num in range(1,n+1):

        if str(num) == str(num**2)[-len(str(num)):]:

            print(num)

"""

3.实验4-8 编写程序,求n以内(不包含n)的所有素数之和。

其中,n是一个大于2的正整数,从键盘输入。

【运行示例】

输入:100

输出:1060

"""

# 类似python123上作业

def is_prime(num):

    if num <= 1:

        return False

    for i in range(2, int(num**0.5) + 1):

        if num % i == 0:

            return False

    return True

n = int(input())

if n > 2:

    prime_sum = 0

    for num in range(2, n):

        if is_prime(num):

            prime_sum += num

    print(prime_sum)

"""

4.实验4-9 编程求出所有小于或等于n(n是小于等于50的正整数,从键盘输入)的自然数对及对数。

自然数对是指两个自然数的和与差都是平方数,如8和17的和25(8+17)与其差9(17-8)都是平方数,

则8和17称为自然数对,且8和17、17和8算一对,只算8和17。

提示:判断正整数N是否是平方数,可用关系表达式math.sqrt(N)==int(math.sqrt(N))来判断。

【输出提示】print(n,"以内的自然数对有:",sep="") print("自然数对共有",num,"对。",sep='')

【运行示例】

输入:50

输出:

50以内的自然数对有:

4 5

6 10

8 17

10 26

12 13

12 37

14 50

16 20

20 29

24 25

24 40

30 34

36 45

40 41

自然数对共有14对。

"""

# 第一个方案太啰嗦也不美观,建议二

import math

n = int(input())

if 1 <= n <= 50:

    num_of_pairs = 0

    pairs = []

    for i in range(1, n):

        for j in range(i+1, n+1):

            sum_ij = i + j

            diff_ij = j - i

            if math.sqrt(sum_ij)==int(math.sqrt(sum_ij))and int(math.sqrt(diff_ij)) == math.sqrt(diff_ij):

                pairs.append((i, j))

                num_of_pairs += 1

    print(n, "以内的自然数对有:",sep='')

    for pair in pairs:

        print(pair[0], pair[1])

    print("自然数对共有", num_of_pairs, "对。",sep='')

# or

def is_square(num):

    import math

    # 把重复的判断弄成函数,减少重复

    return math.sqrt(num) == int(math.sqrt(num))

n = int(input())

num = 0

print(n,"以内的自然数对有:",sep="")

for i in range(1, n+1):

    for j in range(i+1, n+1):

        if is_square(i+j) and is_square(abs(i-j)):

            print(i, j)

            num += 1

print("自然数对共有",num,"对。",sep='')

"""

5.实验4-10 有算式ABCD-CDC=ABC,其中A、B、C、D均为一位非负整数,

编写程序,求A、B、C、D的值。

提示:可以用一重循环,也可以用四重循环。

【运行示例】

输出:A=1 B=0 C=9 D=8

"""

# 四重循环,暴力算

for A in range(10): # A可以是0到9之间的任何数

    for B in range(10): # B也可以是0到9之间的任何数

        for C in range(10): # C同样可以是0到9之间的任何数

            for D in range(10):

                if (A * 1000 + B * 100 + C * 10 + D) - (C * 100 + D * 10 + C) == (A * 100 + B * 10 + C) and A!=B!=C!=D:

                    print("A={} B={} C={} D={}".format(A,B,C,D))

# 一重循环

loop = []

for ABCD in range(1000, 10000):

    A = ABCD // 1000

    B = (ABCD // 100) % 10

    C = (ABCD // 10) % 10

    D = ABCD % 10

    CDC = 100 * C + 10 * D + C

    ABC = 100 * A + 10 * B + C

    # 核心就是loop.append()这里

    if ABCD - CDC == ABC:

        loop.append((A, B, C, D))

for solution in loop:

    A, B, C, D = solution

    print("A={} B={} C={} D={}".format(A,B,C,D))

"""

6.实验4-11 用枚举法解决“鸡兔同笼”问题。

已知在同一个笼子里有鸡和兔共M只,鸡和兔的总脚数为N只,求鸡和兔各有多少只

(允许鸡或兔为0只)。

要求:对输入的数据要考虑下面两个条件。

① 输入的总脚数N必须是偶数,否则输出“输入的脚数为奇数,不合理!”;

② 若求出的只数是负数,则输出“求出的只数为负,输入的数据不合理!”

【运行示例1】

输入:

19

44

输出:鸡有16只,兔有3只

【运行示例2】

输入:

20

45

输出:输入的脚数为奇数,不合理!

【运行示例3】

输入:

100

50

输出:求出的只数为负,输入的数据不合理!

"""

def solve(M, N):

    if N % 2 != 0:

        return "输入的脚数为奇数,不合理!"

    # 枚举所有可能的鸡的数量

    for chickens in range(M + 1):

        # 计算兔子的数量

        rabbits = M - chickens

        # 计算总脚数

        totalFeet = 2 * chickens + 4 * rabbits

        # 如果总脚数等于N,则返回结果

        if totalFeet == N:

            return f"鸡有{chickens}只,兔有{rabbits}只"

    # 如果没有找到符合条件的鸡和兔的数量,说明输入数据不合理

    return "求出的只数为负,输入的数据不合理!"

# 从键盘输入总头数M和总脚数N

M = int(input())

N = int(input())

# 输出结果(没有这一句就打印不出内容)

print(solve(M, N))

"""

7.实验4-12 有一个数列,其前三项分别为1、2、3,从第四项开始,每项均为其相邻的前三项之和,

编写程序,求该数列从第几项开始,其数值超过M(M是大于等于2000的整数,从键盘输入)。

【运行示例】

输入:2000

输出:

数列从第14项开始,数值超过2000。

第14项的值为2632

"""

def sequenceNum(M):

    # 初始化设置数列的前三项

    sequence = [1, 2, 3]

    # 初始化项数

    index = 3 # 我们从第四项开始计算

    # 当数列的当前项小于M时,继续计算下一项

    while sequence[-1] < M:

        next1 = sequence[-1] + sequence[-2] + sequence[-3]

        # 将新计算的项添加到数列中

        sequence.append(next1)

        # 增加项数,计数君

        index += 1

    # 返回超过M的项数和该项的值

    return index, sequence[-1]

M = int(input())

if M < 2000:

    print("输入的数不满足条件,请输入大于等于2000的整数。")

else:

    startIndex, value = sequenceNum(M)

    print("数列从第{}项开始,数值超过{}。".format(startIndex,M))

    print("第{}项的值为{}。".format(startIndex,value))

"""

8.实验4-13 利用格里高利公式求圆周率π的近似值:

π/4 = 1 - 1/3 + 1/5 - 1/7 +…

直到最后一项的绝对值小于eps(eps是一个非常小的数,从键盘输入,如0.000001)时,停止计算。

注意:绝对值小于eps的那一项不计算在结果内。

【运行示例】

输入:0.000001

输出:近似值为:3.141590653589692

"""

def calculatePi(eps):

    pi = 0.0

    sign = 1

    term = 1.0

    counter = 0

    # 使用while循环,直到最后一项的绝对值小于eps

    while term >= eps:

        pi += sign * term

        sign = -sign # 交替符号,和题目中的正负号顺序保持一致

        term = 1.0 / (counter + 3) # 计算下一项

        counter += 2 # 每次增加2,跳过偶数项

    pi *= 4 # 根据公式乘以4得到π的近似值

    return pi

eps = float(input())

# 计算并输出π的近似值

pi = calculatePi(eps)

print("近似值为:{}".format(pi))

"""

9.实验4-14 利用以下公式求sin(x)的近似值,直到最后一项的绝对值小于10-6时,停止计算。计算公式为:

sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ... + (-1)^n * x^(2n+1) / (2n+1)! + ...

这里x的单位为弧度。

注意:绝对值小于10-6的那一项不计算在结果内。

【运行示例】

输入:1.57

输出:sin(1.57)的近似值为:0.9999996270418698

"""

x = eval(input())

r = 1

p = x

s = 0

while abs(p) >= 1e-6:

    s += p

    r += 1

    p = p*(-x*x)/((2*r-2)*(2*r-1))

print("sin({})的近似值为:{}".format(x,s))

"""

10.实验4-15 输入任意实数a(a>=0),用迭代法求x=,要求结果精确到10-6,即|xn+1-xn|<10-6时,xn+1为的近似值。

令x0=a,迭代公式为:x_(n+1)=1/2(x_n+a/x_n)

要求:结果显示到小数点后6位。

【运行示例】

输入:2

输出:x的近似值为:1.414214

"""

def iterative_sqrt(a):
    # 初始猜测值
    x_n = a
    # 迭代计算
    while True:
        # 应用迭代公式
        x_next = (x_n + a / x_n) / 2
        # 检查精度
        if abs(x_next - x_n) < 1e-6:
            break
        # 更新猜测值
        x_n = x_next
    return x_next
# 从键盘输入实数a
a = float(input())
# 确保a大于等于0
if a < 0:
    print("输入的数必须是非负实数。")
else:
    # 计算并输出x的近似值,结果保留6位小数
    x_approximation = iterative_sqrt(a)
    print("x的近似值为:{:.6f}".format(x_approximation))

到了这里,关于矿大python学习通实验4-2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能与信息社会 超星学习通 网课 题库 大全 最全 中国大学 MOOC 北京大学 考试 题目 答案

    【单选题】2016年3月,人工智能程序()在韩国首尔以4:1的比分战胜的人类围棋冠军李世石。 • A、AlphaGo • B、DeepMind • C、Deepblue • D、AlphaGo Zero 我的答案:A得分: 10.0分 2 【单选题】相较于其他早期的面部解锁,iPhone X的原深感摄像头能够有效解决的问题是()。 • A、机主需要通

    2024年02月08日
    浏览(61)
  • Python爬虫入门之2022软科中国大学排名爬取保存到csv文件

    1、获得“2022软科中国大学排名”数据,从【软科排名】2022年最新软科中国大学排名|中国最好大学排名网页中获得排名数据信息,并将数据保存到csv文件中。 2、调用两个CSV文件,将他们合成一个文件,并按排名先后对其进行排序 3、将合并文件储存为txt文件和json文件 我们采

    2024年02月07日
    浏览(55)
  • 燕山大学机器学习实验一:线性回归1——糖尿病情预测

    一、加载糖尿病数据集 diabetes,观察数据 1.载入糖尿病情数据库 diabetes,查看数据。 2.切分数据,组合成 DateFrame 数据,并输出数据集前几行,观察数据。 二、基于线性回归对数据集进行分析 3.查看数据集信息,从数据集中抽取训练集和测试集。 4.建立线性回归模型,训练数

    2024年02月08日
    浏览(55)
  • 湖南大学python头歌实训 实验2:分支语句(一)

    第二章-Python语言基础-2.1简单计算问题的求解(理科) 第1关:数据输入与输出 编程要求 根据提示,在右侧编辑器补充代码,完成如下程序的编写。 第一题 在屏幕上输出字符串:hi, \\\"how are you\\\" ,I\\\'m fine and you 第二题 从键盘输入两个整数,计算两个数相除的商与余数 假设输入

    2024年04月13日
    浏览(45)
  • 同济大学Python程序设计基础 实验九:数据可视化

    1.创建一个2行1列的绘图区并在第1行第1列绘制函数f(x)=x2 的曲线图(x的取值范围[-1,1]),在第2行第1列绘制函数f(x)=1/x的曲线图(x的取值范围[0,1]),效果如图2.9.1所示。 2.调用scatter函数绘制正弦函数的曲线,请在曲线中添加一个表示XY的轴线,并在X轴方向输出刻度标记文本,

    2024年02月16日
    浏览(49)
  • 爬虫:中国大学排行榜

            访问网址https://www.shanghairanking.cn/rankings,爬取排行榜数据,分析按区域的大学数量排行,得出有效结论。 爬取主榜数据并保存在文件中。 分析每个地区上榜大学的数量,保存在文件中。 分析前十名的地区的大学数量,绘制柱状图。 (4)说明爬虫爬取过程中可能

    2024年01月17日
    浏览(50)
  • 中国海洋大学-信息系统开发(Java)复习

    OUC_Shizue 1 Java编译器和执行器 Java编译器和执行器是Java语言的两个核心组件,分别用于将Java源代码编译成Java字节码文件和运行Java字节码文件。 Java编译器负责将Java源代码翻译成Java字节码文件,也就是.class文件,这些文件包含了Java程序的二进制代码。Java编译器通常被称为j

    2024年02月12日
    浏览(78)
  • 中国人民大学与加拿大女王大学金融硕士——在职场寻找新赛道完成蜕变

      职场中的大多数人都会遭遇中年危机,大致有两方面原因,一是时光如梭,不会为任何人停留,年龄的增长是必然的趋势。二是职场的组织结构是金字塔结构,越往上走机会越少。于是很多人就想到转型。说到转型并不是重新从零开始,而是在已有的积累上寻找新的可能,

    2024年02月13日
    浏览(36)
  • 17届全国大学生智能汽车竞赛 中国石油大学(华东)智能视觉组 国特开源

    第一部分:art 矩阵库 透视变换 地图识别 卡尔曼滤波多目标追踪 第二部分:模型训练 环境配置 训练 量化 超模型 数据增强 目标检测 所有开源代码已上传到我的GitHub仓库。 因为寒假回家,大部分的代码都在实验室主机上。所以开源的代码大部分重新编写过,没有经过上车测

    2024年02月11日
    浏览(50)
  • 在职读研弥补学历短板——中国人民大学与加拿大女王大学金融硕士项目

    在当今社会 “文凭化”的理念下,学历变得很重要。学历会影响到一个人成长发展的各各方面,当我们“工作越久,接触社会越久”,越感觉到学历的重要性。具有高学历,就具有更多的发展机会,具有更多精神上的财富,可以站在巨人肩膀上看世界,可以用更高的角度看问

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包