鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: qq819343713

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

[复制链接]
发表于 2019-11-3 07:15:33 | 显示全部楼层
qq819343713 发表于 2019-11-2 23:34
对啊,第一步把前面的减号和加号删除了,所以是不是应该这样前面加一步if s.count('+') and s.conunt('-' ...

删除掉前面的,应该只剩下虚部前的一个了,当然没有再考虑虚部前有多个加减号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那只能用 split 了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 10:45:50 | 显示全部楼层
  1. def isnumber(s):
  2.     if s.count('.') == 1:
  3.         list1 = s.split('.')
  4.         if list1[0].isdigit() == True and list1[1].isdigit() == True:
  5.             return True
  6.         else:
  7.             return False
  8.     if s.count('.') == 0:
  9.         if s.isdigit() == True:
  10.             return True
  11.         else:
  12.             return False
  13.     else:
  14.         return False
  15.         
  16. def func(s:str):
  17.     if s.startswith('-') and (s.endswith('j') or s.endswith('J')):
  18.         if isnumber(s[1:-1]) == True:
  19.             return True
  20.         elif s[1:-1].count('+') == 1:
  21.             list1 = s[1:-1].split('+')
  22.             if len(list1) != 2:
  23.                 return False
  24.             for each in list1:
  25.                 if isnumber(each) == False:
  26.                     return False
  27.             return True
  28.         elif s[1:-1].count('-') == 1:
  29.             list1 = s[1:-1].split('-')
  30.             if len(list1) != 2:
  31.                 return False
  32.             for each in list1:
  33.                 if isnumber(each) == False:
  34.                     return False
  35.             return True
  36.         else:
  37.             return False
  38.     elif isnumber(s[0]) == True and (s.endswith('j') or s.endswith('J')):
  39.         if s[0:-1].count('+') == 1:
  40.             list1 = s[0:-1].split('+')
  41.             if len(list1) != 2:
  42.                 return False
  43.             for each in list1:
  44.                 if isnumber(each) == False:
  45.                     return False
  46.             return True
  47.         elif s[0:-1].count('-') == 1:
  48.             list1 = s[0:-1].split('-')
  49.             if len(list1) != 2:
  50.                 return False
  51.             for each in list1:
  52.                 if isnumber(each) == False:
  53.                     return False
  54.             return True
  55.         elif isnumber(s[0:-1]) == True:
  56.             return True
  57.         else:
  58.             return False
  59.     else:
  60.         return False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 10:51:47 | 显示全部楼层
设计个正则不好么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-3 18:57:47 | 显示全部楼层
zltzlt 发表于 2019-11-3 07:47
那只能用 split 了

总的看用try是最方便的,只要在complex前先判断是否为实数即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-6 19:10:10 | 显示全部楼层

我靠,大哥,厉害,不过我想问下,你的第二个功能是干啥子我有点晕了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-6 19:22:03 | 显示全部楼层
qq819343713 发表于 2019-11-6 19:10
我靠,大哥,厉害,不过我想问下,你的第二个功能是干啥子我有点晕了。

第一个函数是给第二个函数调用的,直接用第二个函数就行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-9 23:41:40 | 显示全部楼层
首先呢,要保证输入的是复数的字符串必须严格符合 z = a+bi 这样的格式,因为呢  z = a + bi +c + di (b != -d) 也叫复数,这样的多了去了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-20 13:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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