复数的相关计算与数字的鲁棒输入
今天做python123平台的题时遇到复数有点蒙,然后总结一下
首先,原题如下
数字的鲁棒输入
描述
获得用户输入的一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。对输入数字进行平方运算,输出结果。
要求:
(1)无论用户输入何种内容,程序无错误;
(2)如果输入有误,请输出"输入有误"。
输入 | 输出 | |
示例 1 |
|
|
示例2 |
|
|
然后很久没见过复数的我受到上一题(字母的鲁棒输入)的思维误导觉得也要弄一个标准库,于是写下了这段代码(之前还有一段我以为计算机不能直接处理十六进制就直接写eval了,直接出局)
#版本1.0
maynum=input()
real=str(eval(maynum).real)
if real in "1234567890.":
num=pow(eval(maynum),2)
print(num)
else:
print("输入有误")
结果还是错了,原因是小数的整数部分和小数部分是不可拆分的,这就难为我了,难道要把小数单独拎出来写一行代码吗?
不可能的,内心是极度不愿意的
那么不妨仿造复数来判断整数部分,然后就有了版本1.1
#版本1.1
maynum=input()
real=str(int(eval(maynum).real))#取复数的实部小数取整
if real in "1234567890":
num=pow(eval(maynum),2)
print(num)
else:
print("输入有误")
见证奇迹的时刻
>>>1+2j
>>>(-3+4j)
>>>1.2
>>>1.44
>>>0x123
>>>输入有误
>>>100**2
>>>输入有误
success
之后看了看答案,发现竟然可以更加简洁,居然比我写的少一行
#版本2.0
s = input()
try:
if complex(s) == complex(eval(s)):
print(eval(s)**2)
except:
print("输入有误")
于是我把我的又改进了一下
#版本1.2
maynum=input()
real=str(int(eval(maynum).real))#取复数的实部小数取整
if real in "1234567890":
print(pow(eval(maynum),2))
else:
print("输入有误")
当然没有什么大的改动//滑稽一下//
现在分析一下复数他是怎么玩出来的
众所周知,独属于复数运算的特殊运算有
1.获得实部虚部
2.复数转化为实数
再想我脑子里也没了
参考答案这里使用了complex函数的性质,这里的x可以是数,也可以是字符串(知识盲区)
THE END
参考python123原题:https://python123.io/student/courses/1521/groups/12973/problems/programmings/19356
本文地址:https://blog.csdn.net/staywithmoon/article/details/107349862
上一篇: 互联网系统程序框架
下一篇: 某公司的面试题--递归拿到所有子类的id