python核心编程学习笔记-2016-07-26-01-习题6-13

来源:互联网 发布:c语言wait函数头文件 编辑:程序博客网 时间:2024/06/07 11:15

习题6-13

将复数字符串转变成复数,由例子'-1.23e+4-5.67j',要考虑用科学计数法表示数字的情况。

代码如下:

#-*-coding: utf-8-*-import stringnum = string.digitsvalid = num + '.' + '+' + '-' + 'e' + 'E' # 复数字符串中可能出现的字符,包括以科学计数法表示的数字def getInput():    while True:        str = raw_input("Please enter a complex number: ")        new_str = ''.join(str.split()) # 需要去掉空格,不然后面截得的实部和虚部会含有空格,而float(' +3.4')会报错。        is_valid = True        if new_str[-1] not in ['J', 'j']: # 复数字符串的最后一位必定是j或J            is_valid = False        else:            for i in range(-2, -len(new_str), -1):                if new_str[i] == '+' or new_str[i] == '-':                    if new_str[i - 1] != 'e' and new_str[i - 1] != 'E': # +或-的前面有两种可能性,一是例如'3+4j',二是例如'3e+4 - 5j',需要排除'e+'这种情况。                        str_real = new_str[-len(new_str):i]                        str_imag = new_str[i:-1]                        break            try:                real = float(str_real)            except ValueError, e:                is_valid = False            else:                try:                    imag = float(str_imag)                except ValueError, e:                    is_valid = False        if is_valid:            return new_str        else:            print "Your enter is invalid."                        def atoc(new_str):    real = ''    imag = ''    for i in range(-2, -len(new_str), -1):        if new_str[i] == '+' or new_str[i] == '-':            if new_str[i - 1] != 'e' and new_str[i - 1] != 'E':                str_real = new_str[-len(new_str):i]                str_imag = new_str[i:-1]                real = float(str_real)                imag = float(str_imag)                break    return complex(real, imag)if __name__ == "__main__":    str = getInput()    print atoc(str)


0 0