众所周知,由于疫情的原因,大家都在上网课,我也不例外啦~
用这个贴子来记录也和大家分享一下我们课上的编程讨论题
中篇在此→python课程编程题汇总(中)
下篇在此→python课程编程题汇总(下)
编写货币转换程序
描述:
人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:
人民币和美元间汇率固定为:1美元 = 6.78人民币。
程序可以接受人民币或美元输入,转换为美元或人民币输出。人民币采用RMB表示,美元USD表示,符号和数值之间没有空格。
注意:获得输入请使用input()
MoneyStr = input("请输入带有符号的数值:")
if MoneyStr[-1] in['B','b']:
USD=eval(MoneyStr[0:-3])/6.78
print("转换后的金额为{:.2f}USD".format(USD))
elif MoneyStr[-1] in['D','d']:
RMB=eval(MoneyStr[0:-3])*6.78
print("转换后的金额为{:.2f}RMB".format(RMB))
else:
print("输入格式错误")
需求:收营员输入苹果价格单位为元/斤,用户购买苹果的重量,单位为斤,计算并且输出付款金额
注意:用户输入用input()函数
转换函数int(x)、float(x)
DJ = eval(input("请输入苹果单价(元/斤):"))
ZL = eval(input("请输入苹果重量(斤):"))
print("付款金额为:{:.2f}".format(DJ*ZL))
编写程序:
随机产生一个8位数,每位数字可以是1到6中的任意一个整数
提示:查阅random库使用,字符串拼接作用
>>> import random
>>> for i in range(8):
a=random.randint(1,6)
print(a,end='')
思考与练习
str = ‘hellopython’
1、截取第一位到第四位的字符
2、截取第二位到第八位之前的字符
3、截取字符串的全部字符
4、截取第六个字符到结尾
5、截取从头开始到倒数第五个字符之前
6、截取第三个字符
7、截取倒数第一个字符
8、逆序截取
9、截取倒数第三位与倒数第一位之前的字符
10、截取倒数第三位到结尾
11、逆序截取,步长为3
>>> str = 'hellopython'
>>> str[0:4]
'hell'
>>> str[1:7]
'ellopy'
>>> str[:]
'hellopython'
>>> str[5:]
'python'
>>> str[:-5]
'hellop'
>>> str[2]
'l'
>>> str[-1]
'n'
>>> str[::-1]
'nohtypolleh'
>>> str[-3:-1]
'ho'
>>> str[-3:]
'hon'
>>> str[::-3]
'ntoe'
>>>a=2
>>>b=4
>>>x=6
>>>y=5
>>>c=1
>>>e=2.759
>>>import math
>>>(math.sin(a)+math.sin(b))/(a+b)
0.025415821919625586
>>> 1/3*((a**3+b**3+c**3)**(1/3))
1.3931130654604105
>>> (e**abs(x-y))/(3**x+(6**0.5)*math.sin(y))
0.03128093849812538
按要求写出Python表达式。
(1)将整数k转换成实数。
(2)求实数x的小数部分。
(3)求正整数m的个、十、百位数字。
//1
float(k)
//2
x-int(x)
//3
m%10 //个位
m%100//10 //十位
m%1000//100 //百位
思考与练习
利用if-elif-else多分支结构
用户输入一个x的值,编写一段程序,利用format输出x和分段函数的值
x=eval(input("请输入x:"))
if x>2:
y=4*x-5
elif -1<=x and x<=2:
y=x*x+3
else :
y=-x+10
print("x为{0:.2f},得分段函数的值y={1:.2f}".format(x,y))
思考与练习
利用if-else 二分支结构编写程序
输入三条边长如果能构成三角形就计算周长和面积
a=eval(input("请输入a边边长:"))
b=eval(input("请输入b边边长:"))
c=eval(input("请输入c边边长:"))
triangle=(a+b)>c and (a+c)>b and (b+c)>a and abs(a-b)<c and abs(a-c)<b and abs(c-b)<a
if triangle:
C=a+b+c
p=C/2
S=(p*(p-a)*(p-b)*(p-c))**0.5
print("可构成三角形,该三角形的周长为{0:.2f},面积为{1:.2f}".format(C,S))
else:
print("不可构成三角形")
思考
1、 蒙特卡罗方法的基本思想是什么?
2、 如何利用蒙特卡罗方法求解π?
//1.基本思想:利用概率模型及随机过程解决一系列实际问题。
//2.构造一个单位正方形和一个单位圆的1/4,计算机随机产生两个0-1之间的数作为
//点的横纵坐标,从点到原点的距离判断是否在圆内,统计落在1/4圆的个数以及落在
//单位正方形的个数,二者相除再乘以四得到最终结果为 π。
from random import random
from time import perf_counter
DARTS=1000*1000
hits=0.0
start=perf_counter()
for i in range(1,DARTS+1):
(x,y=random(),random())
dist=pow(x**2+y**2,0.5)
if dist<=1.0:
hits=hits+1
pi=4*(hits/DARTS)
print("圆周率的值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start))
列举一些常见的异常错误
1、SystemExit:解释器请求退出
2、Keyboardlnterrupt:用户请求中断执行(通常输入Ctrl + C)
3、Stoplteration:迭代器没有更多的值
4、StandardError:所有的内建标准异常的基类
5、GeneratorExit:生成器(generator)发生异常来通知退出
6、ArithmeticError:所有数值计算错误的基类
7、FloatingPointError:浮点数计算错误
8、OverflowError:数值运算超出最大限制
9、ZeroDivisionError:除零错误
10、AssertionError :断言语句失败
11、AttributeError:对象没有这个属性
12、EOFError:没有内建输入,到达EOF标记
13、EnvironmentError:操作系统错误的基类
14、IOError:输入/输出操作失败
15、OSError:操作系统错误
16、WindowsError:系统调用错误
17、ImportError:导入模块/对象失败
18、LookupError:无效数据查询的基类
19、IndexError:序列中没有此索引(index)
20、KeyError:映射中没有这个键
21、MemorryError:内存溢出错误
22、NameError:未声明/初始化对象(没有属性)
23、UnboundLocalError :访问未初始化的本地变量
24、ReferenceError:弱引用(weak reference)试图访问已经回收的对象
25、RuntimeError:一般运行时错误
26、NotlmplementedError:尚未实现的方法
27、SyntaxError:python语法错误
28、IndentationError:缩进错误
29、TabError:Tab和空格混用
30、SystemError:一般解释器系统错误
31、TypeError:对类型无效的操作
32、ValueError:传入无效的参数
33、UnicodeError:Unicode相关的错误
34、UnicodeDecodeError:Unicode 解码时错误
35、UnicodeEncodeError:Unicode 编码时错误
36、UnicodeTranslateError :Unicode转换时错误
思考与讨论
if中判断的条件是否只有bool类型表达式?能否是str类型,或者其他?
不是,可以是任意数值,例如list类型、str类型、set类型、dict类型,但编译系统会把这个表达式强制转成逻辑值
for i in range(1,5):
for j in range(4-i):
print(" ",end="")
for a in range(2*i-1):
print("*",end="")
print("\n")
思考与练习
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
要求:利用递归编写代码
N=10
n=0
def taozi(n):
n=(n+1)*2
return n
for i in range(N):
if i==0:
n=1
else:
n=taozi(n)
print("第一天摘了{}个桃子".format(n))
思考与练习
利用for循环语句 打印输出九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print("{}*{}={}".format(i,j,i*j),end=" ")
print("\n")
思考与讨论
1、 观察实例5.1或5.2中的条件区间范围划分,思考划分的规则是什么?
2、 观察实例代码5.1中的第8行和第10行,思考为何代码不按照注释方式写全变量的最小边界?
3、 Python中判断条件24<=28<25是否合法?其值是什么?
4、 实例代码5.1中第2行最后的反斜杠\有什么作用?
1、5.1是分别根据不同的范围标准来划分,一个是国际BMI标准,一个是国内的标准;5.2是将两个标准整理后,编写在同一个程序中的。
2、因为第一个判断条件中“bmi=18.5不是偏瘦,所以当程序运行时,第一个判断为Falses时,可得此时的bmi>=18.5,就会进入到第二个判断条件“bmi<25”,此时的判断条件就相当于是“18.5<=bmi<25”;第10行同理。
3、合法,值为False
4、作用是分行,避免一行代码过长
思考与讨论
单分支(if语句)、二分支(if-else语句)、多分支(if-elif-else)、if嵌套的应用场景?
1、单分支语句一般应用于只有一个选项,满足条件时执行,不满足则不执行的场景
2、二分支语句一般应用于有两个方案,选择其中一种执行的场景
3、多分支语句则一般应用于多条件分类执行的场景,如”对不同分数分级的问题“
4、if嵌套语句一般应用于一个条件判断完后还需判断条件的问题场景
1.尽可能优化算法
2.善于使用函数,使程序变的模块化
等等
预设一个0-9之间的整数,让用户通过键盘输入所猜的数字,如果大于预设的数,显示“遗憾,太大了”;小于预设的数,显示“遗憾,太小了”,如此循环,知道猜中该数,显示“预测N次,你猜中了!”,其中N是用户输入数字的次数。
import random as r
n=r.randint(0,9)
t=eval(input("请输入你猜测的数字:"))
count=0
while(n!=t):
if t>n:
print("遗憾,太大了")
count=count+1
else:
print("遗憾,太小了")
count=count+1
t=eval(input("请输入你猜测的数字:"))
print("预测{}次,你猜中了!".format(count))
让计算机能够随机产生一个预设数字,范围在0-100之间,其他游戏规则不变。
要求将代码封装到函数中。
def caishuzi():
import random as r
n=r.randint(0,100)
t=eval(input("请输入你猜测的数字:"))
count=0
while(n!=t):
if t>n:
print("遗憾,太大了")
count=count+1
else:
print("遗憾,太小了")
count=count+1
t=eval(input("请输入你猜测的数字:"))
print("预测{}次,你猜中了!".format(count))
caishuzi()
汇率计算问题
人民币和美元间汇率固定为:1美元 = 6.78人民币
格式要求:20USD 或20RMB
增加如下新功能,完成编写程序
功能1:根据输入判断是人民币还是美元,进行相应的转换计算
功能2:程序可以一直运行,直到用户选择退出
while(True):
MoneyStr=input("请输入带有符号(UBD或RMB)的数值(break)退出:")
if MoneyStr=="break":
break
elif MoneyStr[-1] in ['B','b']:
print("输入货币为人民币")
USD=eval(MoneyStr[0:-3])/6.78
print("转换后的金额为{:.2f}USD".format(USD))
elif MoneyStr[-1] in ['D','d']:
print("输入货币为美元")
RMB=eval(MoneyStr[0:-3])*6.78
print("转换后的金额为{:.2f}RMB".format(RMB))
else:
print("输入的格式错误")
以上只是我个人解法和理解,如果有不同的想法欢迎大家一起讨论~
都看到这里了,给我点个赞呗~