SDUT—Python程序设计实验五(列表与元组)

如果你对python中的列表和元组的使用还不是很熟悉,这篇文章也许会提供一些帮助:
Python数据容器之列表(list)与元组(tuple)

7-1 sdut-ASCII码排序

输入N个字符后,按各字符的ASCII码从小到大的顺序输出这N个字符。

输入格式:
输入数据有多组,每组占一行,有N个字符组成。

输出格式:
对于每组输入数据,输出一行,字符中间用一个空格分开。

输入样例:

Input1231
qwe1321
asddsfadsfadsf
zxc1321132dsfa
abcABCDFdefgDEFGHIJhijakfdsadsf;dsa

输出样例:

1 1 2 3 I n p t u
1 1 2 3 e q w
a a a d d d d f f f s s s s
1 1 1 2 2 3 3 a c d f s x z
; A B C D D E F F G H I J a a a a b c d d d d e f f f g h i j k s s s

代码:

try:
    while True:
        ls = list(input())
        ls.sort()
        print(*ls, sep=' ')
except EOFError:
    pass

7-2 sdut-数据逆序

一行输入N个整数,按逆序输出数值。

输入格式:
输入有多行。

每行有若干个整数,用空格分隔。

输出格式:
对于每行输入,将数值逆序输出,数值以空格隔开。

输入样例:

1 3 5 9 7 6 8 2 4 0 234 656 2223
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-3 -43 23 435 -5667 231 100 2002 2035

输出样例:

2223 656 234 0 4 2 8 6 7 9 5 3 1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
2035 2002 100 231 -5667 435 23 -43 -3

代码:

try:
    while True:
        ls = list(input().split())
        ls.reverse()
        print(*ls, sep=' ')
except EOFError:
    pass

7-3 计算 1+2+3+…+m

输入一个正整数m(0<=m<=100),计算 1+2+3+…+m 的值。

输入格式:
多组输入。

在一行输入一个正整数m。

输出格式:
对应每一行输入,在一行中按照格式“sum=S”输出对应的和S.

输入样例:

10
100

输出样例:
在这里给出相应的输出。例如:

sum=55
sum=5050

代码:

try:
    while True:
        n = int(input())
        sum = 0
        for i in range(1, n + 1):
            sum += i
        print("sum=%d" % sum)
except EOFError:
    pass

7-4 sdut-统计身高超过平均值的学生

中小学生每个学期都要体检,量身高,因为身高可以反映孩子的生长状况。
现在,一个班的身高已经量好了,请输出其中超过平均身高的那些学生的身高。

输入格式:
输入为一行数据,以空格分隔,每个数据都是一个正整数。

输出格式:
输出超过身高平均数的学生的身高数值,每个数后面有一个空格。

输出的顺序和输入的相同。

输入样例:

143 174 119 127 117 164 110 128

输出样例:

143 174 164 

代码:

ls = [float(n) for n in input().split()]
avg = float(sum(ls) / len(ls) * 1.0)
for each in ls:
    if each > avg:
        print(int(each), end=' ')

7-5 sdut-求整数的位数及各位数字之和

对于给定的正整数N,求它的位数及其各位数字之和。
(用Python实现提示:把整数转换成字符串,列表,用sum和len函数)

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:

456

输出样例:

3 15

代码:

ls = list(map(int, input()))
print(len(ls), sum(ls))

7-6 sdut-字母替换

编写程序,将输入字符串中的大写英文字母按以下对应规则替换,其他字符不变。
(Python实现提示:转换表用元组实现)

原字母 对应字母

    A        Z
    B        Y
    C        X
    D        W
   ...       ...
    X        C
    Y        B
    Z        A

输入格式:
在一行中输入字符串。

输出格式:
在一行中给出替换完成后的字符串。

输入样例:

This is a pen.

输出样例:
在这里给出相应的输出。例如:

Ghis is a pen.

代码:

s1 = input()
s2 = ""
for i in s1:
    if i.isupper():
        s2 += chr(155 - ord(i))
    else:
        s2 += i
print(s2)

7-7 sdut-输出字母在字符串中位置索引

输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。

输入格式:
第一行输入字符串;

第二行输入两个字符,用空格分开。

输出格式:
从右向左输出字符和索引(中间有一个空格)。下标最大的字符最先输出。每行一个。

输入样例:

pmispsissippi
s p

输出样例:

11 p
10 p
8 s
7 s
5 s
4 p
3 s
0 p

代码:

s = input()
c1, c2 = input().split()
for i in range(len(s) - 1, -1, -1):
    if s[i] == c1 or s[i] == c2:
        print(i, s[i])

7-8 sdut- 输出10个不重复的英文字母

输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来进行输出
如没有10个英文字母,显示信息“not found”。

输入格式:
在一行中输入字符串。

输出格式:
在一行中输出最左边的10个不重复的英文字母;或者显示信息:“not found"

输入样例1:

poemp134567

输出样例1:

not found

输入样例2:

This 156is a test example

输出样例2:

Thisaexmpl

代码:

s1 = input()
s2 = ""
for each in s1:
    if each.isalpha() and each.upper() not in s2 and each.lower() not in s2:
            s2 += each
if len(s2) < 10:
    print("not found")
else:
    print(s2[0:10])

7-9 sdut-判断两个字符串是否为变位词

如果一个字符串是另一个字符串的重新排列组合,那么这两个字符串互为变位词。
比如,“heart” 与 “earth” 互为变位词,“Mary” 与 “arMy” 也互为变位词。“Hello world"与“worldHello"不是变位词。

输入格式:
第一行输入第一个字符串;
第二行输入第二个字符串。

输出格式:
若是变位词,输出:yes;否则,输出:no。

输入样例1:

Mary
arMy

输出样例1:

yes

输入样例2:

hello world
world hello

输出样例2:

yes

输入样例3:

I am very good.
verygood I am.

输出样例3:

no

代码:

from collections import *

def slv(s1, s2):
    if Counter(s1) == Counter(s2):
        print("yes")
    else:
        print("no")

sa = input()
sb = input()
slv(sa, sb)

7-10 sdut-猴子选大王

一群猴子要选新猴王。新猴王的选择方法是:
让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。
请问是原来第几号猴子当选猴王?

输入格式:
在一行中给一个正整数N(≤1000)。

输出格式:
在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

代码:

n,p = int(input()),0
for i in range(2, n + 1):
    p = (p + 3) % i
print(p + 1)

7-11 sdut-找出两组数据中非公共元素

给定两行输入,每行代表一组元素。求两组中非公共的元素。

输入格式:
在两行中给出两组元素,每行的元素间用空格分开。在一行中每个元素只出现一次。

输出格式:
在一行中按照元素的输入顺序输出不是两组共有的元素,以空格分隔。(题目保证至少存在一个这样的元素)

输入样例:

10 3 -5 2 8 0 5 -15 9 100
10 6 4 8 2 -5 9 0 100 1

输出样例:

3 5 -15 6 4 1

代码:

ls1 = list(input().split())
ls2 = list(input().split())
ls3 = []
for it in ls1:
    if it in ls1 and it in ls2:
        pass
    else:
        ls3.append(it)
for it in ls2:
    if it in ls1 and it in ls2:
        pass
    else:
        ls3.append(it)
print(*ls3, sep=' ')

7-12 sdut-特定矩阵元素和

给定一个n×n的方阵,计算该矩阵主、副对角线上的所有元素之和。
主对角线为从矩阵的左上角至右下角的连线;副对角线为从矩阵的右上角至左下角的连线。

输入格式:
输入第一行给出正整数n(1<n≤10);

随后n行,每行给出n个数,其间以空格分隔。

输出格式:
在一行中给出该矩阵主、副对角线的所有元素之和。

输入样例1

4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

输出样例1

21

输入样例2

3
1 2 3
4 5 6
7 8 9

输出样例2

25

代码:

n = int(input())
ls1, sum = [], 0
for i in range(n):
    ls2 = input().split()
    ls1.insert(i, ls2)
    sum += int(ls1[i][i]) + int(ls1[i][n - 1 - i])
if n % 2:
    sum -= int(ls1[n // 2][n // 2])
print(sum)

7-13 sdut-矩阵行、列、对角线和的最大值

求一个3*3矩阵每行、每列及对角线和的最大值。

输入格式:
在一行输入9个整数。

输出格式:
在一行输出每行、每列及对角线和的最大值。

输入样例:

3 6 5 9 8 2 1 4 5

输出样例:

19

代码:

num=list(map(int,input().split()))
l=[]
l.append(num[0]+num[4]+num[8])
l.append(num[2]+num[4]+num[6])
for i in range(0,6,3):
    l.append(num[i]+num[i+1]+num[i+2])
for j in range(0,3):
    l.append(num[j]+num[j+3]+num[j+6])
print(max(l))

7-14 sdut-判断上、下三角矩阵

给定一个三角矩阵,判断其是否为:上三角矩阵、下三角矩阵。
上三角矩阵指主对角线以下的元素都为0的矩阵;
下三角矩阵指主对角线以上的元素都为0的矩阵;
主对角线为从矩阵的左上角至右下角的连线。
输入矩阵是三种情况之一:上三角矩阵、下三角矩阵或者都不是。

输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。
接下来给出T个矩阵的信息:
每个矩阵信息的第一行给出一个不超过10的正整数n。
随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
每个矩阵的判断结果占一行。
如果输入的矩阵是上三角矩阵,输出“upper”,如果输入的矩阵是下三角矩阵,输出“lower”,都不是输出“no”。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
4
1 2 4 0
56 5 7 9
3 4 8 9
0 0 0 0

输出样例:

upper
lower
no

代码:

T = int(input())
for i in range(T):
    t = int(input())
    s = []
    s1 = 0
    s2 = 0
    for j in range(t):
        s.append(list(map(int,input().split())))
    for j in range(t):
        for k in range(t):
            if k > j:
                s1 += s[j][k]
            elif k < j:
                s2 += s[j][k]
    if s1 == 0 and s2 != 0:
        print("lower")
    elif s1 != 0 and s2 == 0:
        print("upper")
    else:
        print("no")

7-15 sdut-打印显示直角字母图形

给定行数,输出指定行数的字母组成的图形。

输入格式:
在一行内给出行数n,1<=n<=10。

输出格式:
输出由大小字母组成的直角图形。

输入样例1:

2

输出样例1:

A
AB

输入样例2:

7

输出样例2:

A
AB
ABC
ABCD
ABCDE
ABCDEF
ABCDEFG

代码:

s="ABCDEFGHIJ"
n=int(input())
for i in range(n):
    for j in range(i+1):
        print(s[j],end='')
    print()

7-16 sdut-array2-4 打印“杨辉三角“ 品中国数学史 增民族自豪感(1)

背景介绍: 北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。

南宋数学家杨辉在《详解九章算法》(1261年)记载并保存了“贾宪三角”,故称杨辉三角。杨辉三角是中国数学史上的一个伟大成就。
杨辉三角,是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

杨辉三角数字的特点为:

(1)在三角形的首列和对角线上,数值均为1;

(2)其余数据为:每个数字等于上一行的左右两个数字之和,第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,用公式表示为: C(n+1,i)=C(n,i)+C(n,i-1)。

图示为:
在这里插入图片描述
杨辉三角的应用:(a+b)的n次方,展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。

输入格式:
欲打印杨辉三角的行数n(1<=n<=13)。

输出格式:
每个数字占据4个字符的位置,数字左对齐,数字不足4位的右边留出空格。

输入样例:

13

输出样例:

1   
1   1   
1   2   1   
1   3   3   1   
1   4   6   4   1   
1   5   10  10  5   1   
1   6   15  20  15  6   1   
1   7   21  35  35  21  7   1   
1   8   28  56  70  56  28  8   1   
1   9   36  84  126 126 84  36  9   1   
1   10  45  120 210 252 210 120 45  10  1   
1   11  55  165 330 462 462 330 165 55  11  1   
1   12  66  220 495 792 924 792 495 220 66  12  1 

代码:

from math import *
def c(n, r):
    if n == 0 or r == 0:
        return 1
    else:
        return int(factorial(n) / (factorial(r) * factorial(n - r)))

x = int(input())
all,l = [], []
for n in range(x):
    for r in range(n + 1):
        l.append(c(n, r))
    all.append(l[:])
    l.clear()
for n in range(x):
    for nn in range(n + 1):
        print("%-4d" % all[n][nn], end='')
    print()

7-17 sdut-array2-5 打印“杨辉三角“ 品中国数学史 增民族自豪感(2)

背景介绍:
北宋人贾宪约1050年首先使用“贾宪三角”进行高次开方运算。
南宋数学家杨辉在《详解九章算法》(1261年)记载并保存了“贾宪三角”,故称杨辉三角。杨辉三角是中国数学史上的一个伟大成就。
杨辉三角,是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

杨辉三角数字的特点为:
(1)在三角形的首列和对角线上,数值均为1;
(2)其余数据为:每个数字等于上一行的左右两个数字之和,第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,用公式表示为: C(n+1,i)=C(n,i)+C(n,i-1)。

图示为:
在这里插入图片描述
杨辉三角的应用:(a+b)的n次方,展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。

输入格式:
欲打印杨辉三角的行数n(1<=n<=13)。

输出格式:
(1)输出的数据为等腰三角形样式;
(2)每个数字占据4个字符的位置,数字左对齐,数字不足4位的右边留出空格;
(3)最后一行的数值“1”顶格,前面无空格。

提示:以n=5,分析行首空格数为:
在这里插入图片描述
输入样例1:

5

输出样例:

        1   
      1   1   
    1   2   1   
  1   3   3   1   
1   4   6   4   1

输入样例2:

6

输出样例:

          1   
        1   1   
      1   2   1   
    1   3   3   1   
  1   4   6   4   1   
1   5   10  10  5   1  

代码:

from math import *

def c(n, r):
    if n == 0 or r == 0:
        return 1
    else:
        return int(factorial(n) / (factorial(r) * factorial(n - r)))

x = int(input())
all = []
l = []
for n in range(x):
    for r in range(n + 1):
        l.append(c(n, r))
    all.append(l[:])
    l.clear()
cnt = x*2-2
for n in range(x):
    print(' '*cnt, end='')
    for nn in range(n + 1):
        print("%-4d" % all[n][nn], end='')
    print()
    cnt -= 2

7-18 sdut-列表去重

输入一个列表,去掉列表中重复的数字,按原来次序输出!

输入格式:
在一行中输入列表。

输出格式:
在一行中输出不重复的列表元素。

输入样例1:

[4,7,5,6,8,6,9,5] 

输出样例1:

4 7 5 6 8 9

输入样例2:

[1,2,3,"abcd","hello",1,2,3,4,5,6] 

输出样例2:

1 2 3 abcd hello 4 5 6

代码:

ls1 = eval(input())
ls2 = sorted(set(ls1), key=ls1.index)
print(*ls2, sep=' ')

7-19 sdut-期末考试之排名次

期末考试结束了,童鞋们的成绩也出来的了,可是为了排名次可忙坏了老师,因为学生太多了。这时,老师把这个任务交给了你,希望你能帮老师完成。作为IT人,你当然不能用笨笨的人工方法了,编程解决才是好办法。
共有三门课,语文、数学和英语,要求根据学生的各科成绩计算出其总成绩,并根据总成绩从高到低排序.

输入格式:
第一行一个整数N(N<=100),代表学生的人数。
接下来的N行数据,每行有三个整数,C,M,E分别代表一个学生语文、数学和英语的成绩.

输出格式:
一共N行,每行一个数,从大到小,分别代表各个学生的总成绩.

输入样例:

3
70 80 90
59 59 59
100 100 100

输出样例:

300
240
177

代码:

n = int(input())
ls = []
for i in range(n):
    ls.append(sum(map(int, input().split())))
ls.sort(reverse=True)
for it in ls:
    print(it)

7-20 sdut- 矩阵转置(II)

从键盘输入一个m(2<=m<=6)*n(2<=n<=6)阶的矩阵,编程输出它的转置矩阵。

输入格式:
在第一行输入矩阵的行数m和列数n的值;

在第二行按照矩阵格式输入矩阵的数据,同行数据之间用空格隔开。

输出格式:
矩阵格式输出,同行数据之间用一个空格隔开。

输入样例:

3 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

输出样例:

1 1 1
2 2 2
3 3 3
4 4 4
5 5 5

代码:

n, m = map(int, input().split())
ls = []
for i in range(n):
    ls.append(list(map(int, input().split())))
ls_re = list(zip(*ls))
for i in range(m):
    print(*ls_re[i], sep=' ')

7-21 sdut-array2-1-矩阵转置(I)

从键盘输入矩阵的行数N,和一个N×N阶的矩阵,编程输出它的转置矩阵。

输入格式:
首行为矩阵的行数(列数)N;
然后是N行N列组成矩阵的数据。每行内数据之间用空格隔开。
输出格式:
矩阵格式输出,每行内非尾部的每个数据后跟一个空格,行尾数据后不加空格,为换行符。

输入样例:

4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

输出样例:

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

代码:

n=int(input())
ls = []
for i in range(n):
    ls.append(list(map(int, input().split())))
ls_re = list(zip(*ls))
for i in range(n):
    print(*ls_re[i], sep=' ')

7-22 sdut-矩阵输出

输入n个整数,输出由这些整数组成的n行矩阵。

输入格式:
第一行输入一个正整数N(N<=20),表示后面要输入的整数个数。

下面依次输入N个整数。

输出格式:
以输入的整数为基础,输出有规律的n行数据。

第1行原样输出获得的N个整数,从第2行开始,上一行最后一个数变成下一行的首个数值。

输入样例:

5
3 6 2 5 8

输出样例:

3 6 2 5 8
8 3 6 2 5
5 8 3 6 2
2 5 8 3 6
6 2 5 8 3

代码:

n = int(input())
ls = list(input().split()*2)
pos1, pos2 = n, len(ls)
for i in range(n):
    print(*ls[pos1:pos2], sep=' ')
    pos1 -= 1
    pos2 -= 1

7-23 sdut-对称矩阵的判定

输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“yes”,不对称输出“no”。

输入格式:
输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。

下面依次输入N行数据。

输出格式:
若矩阵对称输出“yes",不对称输出“no”。

输入样例:

3
6 3 12
3 18 8
12 8 7
3
6 9 12
3 5 8
12 6 3
0

输出样例:

yes
no

代码:

while True:
    n = int(input())
    if n == 0:
        break
    else:
        ls, flag = [], 1
        for i in range(0, n):
            ls.append(list(input().split()))
        for i in range(n):
            for j in range(n):
                if ls[i][j] != ls[j][i]:
                    flag = 0
        if flag == 0:
            print("no")
        else:
            print("yes")

7-24 sdut-array2-2-局部峰值

给定一个N行乘N列的2D数组,逐行扫描该值并打印出所有局部峰值,该值大于其左上、上、右上、左、右、左下、下、右下的值(如果有)。

N的范围是2到150。

输入格式:
多组输入。每组输入包含两部分:

第一行包含整数N,表示2D数组的大小。

后面的N行中的每一行包含N个非负整数,用空格分隔。

输出格式:
对于每组输入,输出所有局部峰值按行顺序排列,每个局部峰值后跟一个空格。

如果没有局部峰值,则输出“none”。

每组输出之后加换行符。

输入样例:

2 
5 1 
1 0 
2
5 2
2 3
3
5 5 5
0 5 0
5 5 5
3
1 2 5
2 3 2
4 2 3

输出样例:

5 
5 
none
5 4 

代码:

while True:
    try:
        n, ls = int(input()), []
        ls.append([float('-inf')] * (n + 2))
        for i in range(n):
            row = list(map(int, input().split()))
            row.insert(0, float('-inf'))
            row.append(float('-inf'))
            ls.append(row)
        ls.append([float('-inf')] * (n + 2))
        flag = 0
        for i in range(1, n + 1):
            for j in range(1, n + 1):
                if ls[i][j] > max(ls[i - 1][j - 1], ls[i - 1][j], ls[i - 1][j + 1], ls[i][j - 1], ls[i][j + 1],
                                  ls[i + 1][j - 1], ls[i + 1][j], ls[i + 1][j + 1]):
                    print("%d " % ls[i][j], end='')
                    flag = 1
        if flag == 0:
            print("none")
        else:
            print()
    except EOFError:
        break

代码可能不是特别好,感谢大家耐心阅读
212丨acc丨2022.11.4

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1,过程作为返回值 在1.3中我们明白了高阶函数之后,“用一个过程作为另外一个过程的返回值”则是稀松平常的事情了,比如下面的代码: (define (f x) (+ x 1)) (define (g) f) ((g) 2) 函数g没有参数,其返回值为函数f,所以((g) 2)就运算结果就是(f 2),最后运算结果为3。 上面是用一个已命名的函数作为返回结果的,相应的,也可以将一个“匿名过程”作为结果返回,这里的“匿名过程”也就是我们的Lambda表达式,所以上面的代码可以改造成: (define (g) (lambda (x) (+ x 1))) ((g) 2) 那么((g) 2)的运算结果就是((lambda (x) (+ x 1)) 2),最后运算结果为3。 2,牛顿法 学到这里,你可能需要复习一下高等数学的基本内容,包括“导数”和“微分”,高数的在线教材可以在这里找到:http://sxyd.sdut.edu.cn/gaoshu1/index.htm 关于牛顿法的介绍可以看这里:http://en.wikipedia.org/wiki/Newton%27s_method ,下面是程序: (define (close-enough? v1 v2) (< (abs (- v1 v2)) 0.000000001)) ;定义不动点函数 (define (fixed-point f first-guess) (define (try guess step-count) (let ((next (f guess))) (if (close-enough? guess next) next (try next (+ step-count 1))))) (try first-guess 0)) ;定义导数函数 (define (D f) (lambda (x dx) (/ (- (f (+ x dx)) (f x)) dx))) ;牛顿法 (define (newton g first-guess) (fixed-point (lambda (x) (- x (/ (g x) ((D g) x 0.000000001)))) first-guess)) ;平方 (define (square x) (* x x)) ;定义开方,来测试下牛顿法 (define (sq x) (newton (lambda (y) (- (square y) x)) 1.0)) (sq 5) 3,“一等公民” 这里列出了程序语言中作为“一等公民”的语言元素所具备的几个“特权”: 可以用变量命名 可以作为过程参数 可以作为过程返回结果 可以被包含在数据结构中 4,练习1.40 求三次方程 x^3 + ax^2 + bx + c 的零点。 首先,证明 函数f(x) = x^3 + ax^2 + bx + c 是“可微”的: 由可导和可微的性质知道,可导和可微互为充要条件,所以,要证可微我们可以先证可导, f ’ (x) = (x^3)’ + (ax^2)’ + (bx)’ + (c)’ = 3x^2 + 2ax + b 所以f(x)的导数存在,那么f(x)可导,其必定可微。 其次,利用“牛顿法”:如果f(x)是可微函数,那么f(x)=0的一个解就是函数(x – f(x)/df(x)的一个不动点,其中df(x)是f(x)的导数。所以我们可以轻松得到下面的代码: (define (close-enough? v1 v2) (< (abs (- v1 v2)) 0.000000001)) ;定义不动点函数 (define (fixed-point f first-guess) (define (try guess step-count) (let ((next (f guess))) (if (close-enough? guess next) next (try next (+ step-count 1))))) (try first-guess 0)) ;定义导数函数 (define (D f) (lambda (x dx) (/ (- (f (+ x dx)) (f x)) dx))) ;牛顿法 (define (newton g first-guess) (fixed-point (lambda (x) (- x (/ (g x) ((D g) x 0.000000001)))) first-guess)) ;定义cubic函数,也就是我们题目中所谓的f(x) (define (cubic a b c) (lambda (x) (+ (* x x x) (* a x x) (* b x) c))) ;随便定义几个系数 (define a 3) (define b 5) (define c 8) (define result (newton (cubic a b c) 1.0)) ;定义一个验证过程,让其验证得到的解,是否让方程成立 (define (validate x) (= 0 (+ (* x x x) (* a x x) (* b x) c))) ;输出结果 result ;验证结果 (validate result) 比如上面我们计算 x^3 + 3x^2 + 5x + 8 = 0, 其一个解为:-2.3282688556686084 .....
SDUT 是山东理工大学(Shandong University of Technology)的缩写,这里我假设你是在问关于 Python 字符串的问题。 Python 中的字符串是一种不可变的序列类型,用于表示 Unicode 字符序列。Python 字符串可以用单引号、双引号或三引号括起来,三引号可以用于表示多行字符串。例如: ```python s1 = 'Hello, world!' s2 = "Hello, world!" s3 = '''Hello, world!''' ``` 如果你需要在字符串中使用单引号或双引号,可以使用另一种引号来括起来字符串,例如: ```python s4 = "I'm a student." s5 = 'He said, "Hello, world!"' ``` Python 提供了一些内置的字符串方法,例如: - `str.lower()`:返回字符串的小写形式。 - `str.upper()`:返回字符串的大写形式。 - `str.strip([chars])`:移除字符串开头或结尾的指定字符,默认移除空格符。 - `str.split([sep[, maxsplit]])`:使用指定的分隔符将字符串分割为子字符串。 - `str.join(iterable)`:使用字符串将可迭代对象中的元素连接起来。 - `str.replace(old, new[, count])`:返回将字符串中指定子字符串替换为新字符串后的副本。 例如: ```python s = ' Hello, world! ' s = s.strip() # 移除开头和结尾的空格符 print(s.lower()) # 输出:hello, world! print(s.upper()) # 输出:HELLO, WORLD! print(s.split(',')) # 输出:['Hello', ' world!'] print('-'.join(s.split(','))) # 输出:Hello- world! print(s.replace('world', 'Python')) # 输出:Hello, Python! ``` 希望这些信息对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值