Python - TypeError

时间:2013-04-03 15:34:06

标签: python

abir=float(15.67)
aiki=float(17.23) 
auc=float(0.75)
adort=float(93.2)
abes=float
be=float
an=float
kn=float
kontrol=1
x=float
def giris():
        print("Yari-Deneysel Kutle Formulunden Yararlanarak Baglanma Enerjisini Bulmak Icin :")       
        an=input("Atom Numarasini Giriniz  : ")
        global kn
        global x
        kn=an
        x=an*3
        print(an,kn,x)
        a=float(abir*kn)
        b=float(aiki*(kn**(2.0/3.0)))
        c=float(auc*(an**2)/(kn**(1.0/3.0)))
        d=float(adort*((kn-(2*an))**2)/kn)
        e=float(abes/(kn**(0.5)))
        be=a-b-c-d+e
        nb=float(be/kn)
        print("Atom Numarasi :",kn)
        print("Kutle Numarasi :",an)
        print("Toplam Baglanma Enerjisi : ",be," MeV'dir.")
        print("Nukleon Basi Baglanma Enerjisi : ",nb," MeV'dir.")
        print(kn)
        kn+=1
def nokontrol():
        if kn>0:
                if an>0:
                        if kn%2==0:
                                if an%2==0:
                                        abes=12
                                        formul()
                                        kontrol=0
                                else:
                                        abes=0
                                        formul()
                                        kontrol=0
                        else:
                                if an%2==0:
                                        abes=0
                                        formul()
                                        kontrol=0
                                else:
                                        abes=-12
                                        formul()
                                        kontrol=0
                elif an<0:
                        print("Atom Numarasi Sifirdan Kucuk Olamaz.")
                else:
                        print("Atom Numarasi Sifir Olamaz.")
        elif kn<0:
                print("Kutle Numarasi Sifirdan Kucuk Olamaz.")
        elif kn==0 and an==0:
                print("Kutle Numarasi ve Atom Numarasi Sifir Olamaz.")
while kontrol==1:        
        giris()
        while an==x:
                nokontrol()

这是错误:

Traceback (most recent call last):
    a=float(abir*kn)
TypeError: can't multiply sequence by non-int of type 'float'

结果: Yari-Deneysel Kutle Formulunden Yararlanarak Baglanma Enerjisini Bulmak Icin; Atom Numarasini Giriniz:28 28 28 282828

28 * 3 = 282828 ??? correct : 28 * 3 = 84?

帮帮我,我刚开始用Python进行物理学习。如果你纠正我的错误,我会很感激。代码在python 3.3中。参数是原子序数an,质量数kn"an==3*kn"将继续增加,直到1 kn。它扩展到所有“formul()”实现结果的打印。浮动类型是错误的。孤独的我。我无法解决这个错误是一个家伙我该怎么办?我的英语不好,抱歉

5 个答案:

答案 0 :(得分:3)

giris

的第五行
kn=an

你将kn设置为字符串,这是序列,python抱怨。

答案 1 :(得分:2)

您要将多个变量(abesbeanknx)分配给函数{{1}而不是实际的浮点值。然后,当您尝试将此时间乘以其他任何时间时,您会得到float,因为您无法将TypeError个对象相乘。如果您想在函数外部初始化这些值,只需将它们设置为type0

当然,您的特定问题是,在您将None分配给kn=an来电中的字符串后,您需要重新分配an。这就是Python抱怨“序列”的原因。但就像我说的那样,你遇到的问题不仅仅是那个问题。

答案 2 :(得分:1)

以下内容并不符合您的期望:

abes=float
be=float
an=float
kn=float

如果您只是想将它们初始化为零,请写

abes=0.0

另外,

abir=float(15.67)

可以写成

abir=15.67

等。 float()电话是多余的。

同样如此
a=float(abir*kn)

最后,在您未向您展示的代码中的某个地方正在将abir转换为序列(例如列表或元组)。

答案 3 :(得分:1)

老实说,我不知道你在那里做什么......

第一步:修复它的方式(以及你的Python经验):删除所有那些'浮动',那里...... Python是动态类型的,不需要声明类型。

如果你写'i = float'之类的东西,你不要声明我的类型为float,而是将值'float'(这是一个类型)赋给名称'i'。 如果你跟进5 * i,你的程序本质上意味着'5次类型浮动',这没有多大意义。

答案 4 :(得分:0)

如果你得到28 * 3 = 282828,那么实际发生的是28是一个字符串。 '28'* 3是'282828'。您可以使用int('28')或带float('28')

的浮点数将字符串更改为int

从查看代码开始,我认为这就发生在

an=input("Atom Numarasini Giriniz  : ")

尝试将其更改为

an=int(input("Atom Numarasini Giriniz  : "))