求解一元二次方程
已知一元二次方程的三个系数,编程求ax^2 +bx+c=0方程的根,系数a,b,c的值由键盘输入,构建一个一元二次方程的实例,假设a,b,c的值,要求根据 b^2 −4ac的值的不同输出不同的结果。
1)a=0 并且 b=0 ,无解;
2)a=0 并且 b!=0,有一个实根;x=-c/b;
3) b^2-4ac = 0,有两个相等实根:x1=x2=-b/(2a);
4) b^2-4ac > 0,有两个不等实根:
5) b^2-4ac < 0,有两个共轭复根:
import math
a,b,c=eval(input())
if (a == 0):
if (b == 0):print("此方程无解!")
else:print(str.format("此方程的解为: {0}", -c / b))
elif b**2 -4*a*c == 0:
x = -b/(2*a)
print("此方程有两个相等实根: %.2f"%x)
elif b**2 -4*a*c > 0:
x1 = (-b+(b**2 - 4*a*c)**0.5)/(2*a)
x2 = (-b-(b**2 - 4*a*c)**0.5)/(2*a)
print("此方程有两个不等实根: %.2f 和 %.2f"%(x1, x2))
else:
a1 = -b/(2*a)
b1 = (4*a*c-b*b)**(0.5)/(2*a)
print("此方程有两个不等实根: %.2f+%.2fi 和 %.2f-%.2fi"%(a1, b1, a1, b1))
用牛顿迭代法求一元多次方程 x^3 - 3x^2-x+3=0在给定值附近的解(保留2位小数)。
迭代公式:
x1=x0-f(x0)/f’(x0),其中,
f(x)= x^3 - 3x^2-x+3,
f’(x)=3x^2-6x-1
(相差1e-5输出)
#用牛顿迭代法求一元方程x^3-3x^2-x+3=0在指定值附近的根
import math
x=eval(input()) #x为指定值
#-------------------BEGIN------------------
x0 = x - 1e-5
while (abs(x - x0) >= 1e-6):
x0 = x
f = ((x-3)*x-1)*x + 3
f1 = (3*x-6)*x - 1
x = x - f / f1
print("x=%.2f"%x)
#------------------- END------------------
数字汉字转换
不管是阿拉伯数字(1、2、3……), 还是所谓汉字小写数码(一、二、三……), 由于笔画简单,容易被涂改伪篡。所以一般文书和商业财务票据上的数字都要采用汉字数码大写: 壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、(“万、亿”本身笔画已经比较复杂,使用机会也少,没有必要再用别的字代替)。如“ 3564 元”写作“叁仟伍佰陆拾肆元” 。
x=input("")
hz='零壹贰叁肆伍陆柒捌玖'
dw='拾佰仟万拾佰仟亿拾佰仟兆'
y=""
i=len(x)
for c in x[:-1]:#除掉了个位数
#转大写数字
if c!="0" or (c=='0' and x[-i+1]!="0" and i!=5 and i!=9):#①
y=y+hz[int(c)]
#添加单位
if c!='0' or (c=='0' and ((i==5 and y[-1]!="亿" and y[-1]!="兆") or (i==9 and y[-1]!="兆"))):#②
y=y+dw[i-2]
i=i-1#
#判断个位是否为0
if x[-1]!="0":
y=y+hz[int(x[-1])]
y=y+"元"
print(y)
'''
若无①判断条件
eg:1000 => 【壹仟零佰零拾元】(应该是【壹仟元】)
【判断逻辑】应为:
①如果【该位】的数字不为0;
②如果【该位】为0,则必需【下一位】的数字不为0,且【该位】不处于【万】位或【亿】位上(如果处于万位
eg:101000=>【壹拾零万壹仟元】
其实该处相当于低位上的个位处理)。
满足上述条件任意一条,则可直接转换为大写汉字
②处的判断逻辑:
当(i==5 or i==9)时
就是【该位】处于【万】位或【亿】位上,即使此处为0,也应该把单位输出,如果没有
eg:101000=>【壹拾壹仟元】(应该是【壹拾万壹仟元】)
加上(y[-1]!="亿" and y[-1]!="兆")是对高位的判断,若无此判断
eg:100000000=>壹亿万元(应该为【壹亿元】)
!!!本题涉及到了【数字转换】和【单位添加】的三种判断情况:
①【连续0】情况的判断
②【该位】处于【万】位或【亿】位的情况判断
③最高位是【亿】或【兆】对于②的情况判断
'''
模拟中国体育彩票七星彩。过程:随机产生一个数,包含7个数码(0~9任意)。用户根据提示从键盘输入自己的幸运号码,判断是否中奖,若中奖,判断中奖等级,并输出结果(包括中奖号码,和中奖情况)。
中奖等级根据相同的数码个数决定(判断相同位置的号码是否相同。)。 例如:随机产生的数是:1234567;你输入的随机数是:1222222
前两个数相同,五等奖。 又例如:随机数4523874 和幸运号码 5820670
,也有两位数项目,分别是第4位的2和第6位的7,所以也的五等奖。
等级如下:
相同数字个数 2 3 4 5 6 7
中奖等级别 5 4 3 2 1 特等奖
while 1:
import random
# 随机产生数
random_num = str(random.randint(0,9999999))
# 输入的数
input_num = input("PLS input:")
# 补0操作
random_num = random_num.zfill(7)
#中奖结果
print(random_num)
ans = 0
for i in range(7):
if random_num[i]==input_num[i]:
ans+=1
if ans>1&ans<7:
print(str(7-ans)+"等奖")
elif ans == 7:
print("特等奖")
else:
print("谢谢惠顾")
输入一个整数,判断其是否回文数。
x=input("请输入一个数字")
#代码开始
if x.isnumeric():
s = x[::-1]
if s == x:
print(x+"是回文数")
else:
print(x+"不是回文数")
else:
print("不是数字")
猜单词
猜单词游戏,计算机随机产生一个单词,打乱字母顺序,供玩家猜测,采用控制字符界面。例如:
乱序后单词: luebjm
请你猜:jumble
真棒 ,你猜对了!
是否继续(Y/N):
…
import random
#单词库
words = ["reluctant","reliance","diffuse","wholly","entail"]
save = list()
#主函数
def main():
while 1:
#生成随机单词
rword = list(words[random.randint(0, len(words) - 1)])
cword = rword[:]
random.shuffle(rword)
print("乱序后单词:"+"".join(rword))
flag = 0
for i in range(3):
print("请你猜:",end="")
userword = list(input())
if userword == cword:
save.append("".join(cword))
print("真棒,你猜对了!")
flag = 1
break
if flag == 1:
print("是否继续(Y/N)")
ans = input()
if ans == 'Y':
continue
else:
print(save)
break
else:
print("".join(cword))
continue
main()
有用的知识点
获取字符在字符串的位置
使用str.find(c)方法可以返回字符串str中字符c所在位置的序号。
“2021/2/25“.find(“/“)返回数字4。
str.rfind(c)方法可以返回从尾部起,字符串str中字符c所在位置的序号。
“2021/2/25“.rfind(“/“)返回数字6。
可以逆序间隔地取字符
例如 x="hello world"
则x[-1::-2]表示从结尾字符每隔2个字符取子串,即"drwolh"