鱼C论坛

 找回密码
 立即注册
查看: 6602|回复: 27

检验输入字符串是否是复数类型?

[复制链接]
发表于 2019-11-2 21:43:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有没有大佬知道如何使用str()的一些内置函数解决这个问题。就是输入一个字符串,字符串里是复数就输入True,不是就False!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-11-2 21:55:45 | 显示全部楼层
str的方法没有针对复数的,可以自己写个函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 22:01:32 | 显示全部楼层
冬雪雪冬 发表于 2019-11-2 21:55
str的方法没有针对复数的,可以自己写个函数。

那请问怎么写呢。我们老师的要求不能用什么try啊。。我想了很久都不知道怎么办,大哥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 22:15:30 | 显示全部楼层
如果用try很好写。如果不用的话先看看什么样的算是复数?
1.只有虚部如2j(python不用i,而用j表示)
2.包括实部和虚部如2+3j,3-5j
首先检测字符串是否有,且只有一个加号或减号,如果有用split分解,看看第一部分是否都为数字,第二部分是否为数字+j,是的话为True
如果检测字符串没有加减号,则看是否为数字+j,是的话为True
其余为False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 22:36:15 | 显示全部楼层
str 没有检测字符串是否是复数的方法,可以自己编个函数(建议用 try,干净利落):

  1. def is_complex(string):
  2.     try:
  3.         complex(string)
  4.         return True
  5.     except:
  6.         return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 22:38:33 | 显示全部楼层
冬雪雪冬 发表于 2019-11-2 22:15
如果用try很好写。如果不用的话先看看什么样的算是复数?
1.只有虚部如2j(python不用i,而用j表示)
2. ...

我来试一试哈,版主,
x ='1+1j'
if (x.count('+') or x.count('-') )>1:
      if a,b= x.split('+','-'):
                if a.isdigit()== Ture and b==b.isdigit() +'j':

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 22:40:18 | 显示全部楼层
qq819343713 发表于 2019-11-2 22:38
我来试一试哈,版主,
x ='1+1j'
if (x.count('+') or x.count('-') )>1:

我就只能写到这里,但感觉不太对。比如x=(‘2131.213-.1233j’)也是复数。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 22:41:17 | 显示全部楼层
zltzlt 发表于 2019-11-2 22:36
str 没有检测字符串是否是复数的方法,可以自己编个函数(建议用 try,干净利落):

好的,谢谢,但是!!!老师要求不能try!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 22:53:14 | 显示全部楼层
qq819343713 发表于 2019-11-2 22:40
我就只能写到这里,但感觉不太对。比如x=(‘2131.213-.1233j’)也是复数。。。

python字符串方法中没有检测浮点数的,自己写比较麻烦。另外你的程序还是有些问题的,我写了个仅对整数有效的共参考。
  1. def test(s):
  2.     s = s.strip('+-')
  3.     if s.count('+') + s.count('-') == 1:
  4.         if '+' in s:
  5.             a, b = s.split('+')
  6.         else:
  7.             a, b = s.split('-')
  8.         if a.isdigit() and b[:-1].isdigit() and b[-1].upper() == 'J':
  9.             return True
  10.     elif s[:-1].isdigit() and s[-1].upper() == 'J':
  11.         return True
  12.     else:
  13.         return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 22:57:32 | 显示全部楼层
冬雪雪冬 发表于 2019-11-2 22:53
python字符串方法中没有检测浮点数的,自己写比较麻烦。另外你的程序还是有些问题的,我写了个仅对整数有 ...

版主我觉得这样,在你写的这个基础上加上一个s.replace('.','')
把小数点去除,然后就变成了整数,这些对么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 22:59:52 | 显示全部楼层
本帖最后由 Stubborn 于 2019-11-2 23:02 编辑
  1. # s 表示字符串
  2. return isinstance(eval(s), complex)
复制代码


可行性有待实践
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 23:05:05 | 显示全部楼层

大哥,谢谢,但是你这个存在问题哦,比如(‘213123.2332.2323-1j’)单纯complex(s)是会报错的哦, 但你的也返回True.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 23:06:38 | 显示全部楼层
qq819343713 发表于 2019-11-2 22:57
版主我觉得这样,在你写的这个基础上加上一个s.replace('.','')
把小数点去除,然后就变成了整数,这些 ...

如果这样呢?
'12.3.4..5...6'.replace('.', '')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 23:09:07 | 显示全部楼层
zltzlt 发表于 2019-11-2 22:36
str 没有检测字符串是否是复数的方法,可以自己编个函数(建议用 try,干净利落):

有一个问题
1是实数,不是复数,但complex('1')是可以通过的,返回(1+0j)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 23:09:51 | 显示全部楼层
qq819343713 发表于 2019-11-2 22:57
版主我觉得这样,在你写的这个基础上加上一个s.replace('.','')
把小数点去除,然后就变成了整数,这些 ...

然后,小数点不能在中间,只能在前面或者后面,或者虚数部分j的前面,这样就排除了比如(‘21313.213131.233-1j’)这种情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 23:10:22 | 显示全部楼层
哪只能照楼上的,判断一个复数必要的条件,在这个字符串里面是不是都有,位置是不是都对了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 23:19:09 | 显示全部楼层
冬雪雪冬 发表于 2019-11-2 23:09
有一个问题
1是实数,不是复数,但complex('1')是可以通过的,返回(1+0j)

。。。。难受啊。。。好像怎么写都不对了。。。
版主大哥,你的也有问题。比如(--1213-1j)返回也是True
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 23:20:33 | 显示全部楼层
Stubborn 发表于 2019-11-2 23:10
哪只能照楼上的,判断一个复数必要的条件,在这个字符串里面是不是都有,位置是不是都对了

难受啊。哎。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-2 23:29:52 | 显示全部楼层
qq819343713 发表于 2019-11-2 23:19
。。。。难受啊。。。好像怎么写都不对了。。。
版主大哥,你的也有问题。比如(--1213-1j)返回也是Tru ...

>>> --12+3J
(12+3j)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-2 23:34:57 | 显示全部楼层

对啊,第一步把前面的减号和加号删除了,所以是不是应该这样前面加一步if s.count('+') and s.conunt('-')> 3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-20 11:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表