python100道上机题-100道Python编程题及答案(一)

本文列举了100道Python编程题目,包括数学计算、逻辑推理、数据处理等多个方面。题目涵盖从简单的算术问题到复杂的奖金计算,再到判断素数、分解质因数等。每道题目都有详细分析和程序源代码,是学习和提高Python编程技能的好资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目1:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在

第10次落地时,共经过多少米?第10次反弹多高?

1.程序分析:见下面注释

2.程序源

for n in range(2,11):

Sn += 2 * Hn

Hn /= 2

print 'Total of road is %f' % Sn

print 'The tenth is %f meter' % Hn

'''

题目2:打印出所有的"水仙花数”,所谓"水仙花数”是指一个三位数,其各位

题目3:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去

掉不满足条件的排列。

2.程序源代码:

'''

for i in range(1,5):

for j in range(1,5):

for k in range(1,5):

if( i != k ) and (i != j) and (j != k):

print i,j,k

'''

题目4:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高

于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提

成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于

40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于

100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

2.程序源代码:

'''

bonus1 = 100000 * 0.1

bonus2 = bonus1 + 100000 * 0.500075

bonus4 = bonus2 + 200000 * 0.5

bonus6 = bonus4 + 200000 * 0.3

bonus10 = bonus6 + 400000 * 0.15

i = int(raw_input('input gain:n'))

if i <= 100000:

bonus = i * 0.1

elif i <= 200000:

bonus = bonus1 + (i - 100000) * 0.075

elif i <= 400000:

bonus = bonus2 + (i - 200000) * 0.05

elif i <= 600000:

bonus = bonus4 + (i - 400000) * 0.03

elif i <= 1000000:

bonus = bonus6 + (i - 600000) * 0.015

else:

bonus = bonus10 + (i - 1000000) * 0.01

print 'bonus = ',bonus

'''

题目5:一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?

1.程序分析:在1

好的,我将根据文档内容详细回答这两上机题,并提供相应的Python代码实现。 ### 上机题1:截断误差和有效数字 #### 背景 题目要求编制两个通用程序,分别按照从大到小和从小到大的顺序计算 \( S_N \),并比较结果的有效位数。假设 \( S_N = \sum_{i=1}^N \frac{1}{i} \)。 #### (1) 编制按从大到小的顺序计算 \( S_N \) 的通用程序 ```python def sum_large_to_small(N): S = 0.0 for i in range(1, N + 1): S += 1 / i return S # 示例 N = 1000 result_large_to_small = sum_large_to_small(N) print(f"Sum from large to small: {result_large_to_small}") ``` #### (2) 编制按从小到大的顺序计算 \( S_N \) 的通用程序 ```python def sum_small_to_large(N): S = 0.0 for i in range(N, 0, -1): S += 1 / i return S # 示例 N = 1000 result_small_to_large = sum_small_to_large(N) print(f"Sum from small to large: {result_small_to_large}") ``` #### (3) 按两种顺序分别计算 \( S_{1000} \),并指出有效位数 ```python import math # 计算S_1000 N = 1000 result_large_to_small = sum_large_to_small(N) result_small_to_large = sum_small_to_large(N) # 输出结果 print(f"Sum from large to small: {result_large_to_small}") print(f"Sum from small to large: {result_small_to_large}") # 计算有效位数 def count_significant_digits(a, b): diff = abs(a - b) if diff == 0: return len(str(a)) else: significant_digits = -int(math.floor(math.log10(diff))) - 1 return max(significant_digits, 0) significant_digits = count_significant_digits(result_large_to_small, result_small_to_large) print(f"Number of significant digits: {significant_digits}") ``` #### (4) 通过本次上机题,你明白了什么? - **浮点数运算的不稳定性**:不同顺序的加法可能会导致不同的结果,特别是在处理大量项时。 - **有效位数的重要性**:了解有效位数可以帮助评估数值计算的准确性。 - **编程实践**:通过编写程序来验证数学概念,加深对数值分析的理解。 ### 上机题2:非线性方程求解 #### 背景 题目要求使用牛顿法解方程 \( f(x) = 0 \),并给出具体方程 \( f(x) = x^3 - x - 1 \)。已知该方程有三个根。 #### (1) 确定尽可能大的 \( \delta \) 牛顿法的局部收敛性表明,存在个 \( \delta > 0 \),使得当初始值 \( x_0 \) 在 \( [x_2^* - \delta, x_2^* + \delta] \) 内时,牛顿迭代序列收敛于根 \( x_2^* \)。我们可以通过试验找到这个 \( \delta \)。 ```python def newton_method(f, df, x0, tol=1e-6, max_iter=1000): x = x0 for _ in range(max_iter): fx = f(x) if abs(fx) < tol: return x dfx = df(x) if dfx == 0: raise ValueError("Derivative is zero. No solution found.") x -= fx / dfx raise ValueError("Maximum number of iterations reached. No solution found.") def f(x): return x**3 - x - 1 def df(x): return 3*x**2 - 1 # 确定delta x_star = 1.324717957244746 # 已知的个根 delta = 0.1 while True: try: x0 = x_star + delta root = newton_method(f, df, x0) if abs(root - x_star) < 1e-6: delta *= 1.1 else: break except ValueError: break delta = delta / 1.1 print(f"Largest delta: {delta}") ``` #### (2) 观察不同初始值下的收敛性 ```python initial_values = [-2, -1, 0, 1, 2] roots = [] for x0 in initial_values: try: root = newton_method(f, df, x0) roots.append((x0, root)) except ValueError as e: print(e) for x0, root in roots: print(f"Initial value: {x0}, Converged to root: {root}") ``` #### (3) 通过本上机题,你明白了什么? - **牛顿法的局部收敛性**:牛顿法在接近根的初始值附近具有很好的收敛性。 - **选择合适的初始值**:不同的初始值可能导致收敛到不同的根或不收敛。 - **编程实践**:通过编写程序来实现和测试数值算法,可以更好地理解其特性和局限性。 希望这些解答对你有所帮助!如果有任何进步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值