1
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 公式 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()”实现结果的打印。浮点类型错误。d 的孤独。我无法修复这个错误是一个 kin 我能做什么?我的英语不好,对不起

4

5 回答 5

3

在第五行giris

kn=an

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

于 2013-04-03T15:42:20.037 回答
2

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

当然,您的具体问题是,您kn=an在分配给呼叫an中的字符串后重新分配。input这就是 Python 抱怨“序列”的原因。但就像我说的,你有比这更大的问题。

于 2013-04-03T15:42:35.093 回答
1

以下内容不符合您的预期:

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

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

abes=0.0

ETC

此外,该

abir=float(15.67)

可以写成

abir=15.67

float()电话是多余的。

这同样适用于

a=float(abir*kn)

等等

最后,在代码中的某个地方你没有显示你正在abir变成一个序列(例如一个列表或一个元组)。

于 2013-04-03T15:37:56.720 回答
1

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

第一步:在修复它的路上(以及您的 Python 经验):删除所有那些“浮点数”,那里...... Python 是动态类型的,无需声明类型。

如果你写了类似'i=float'的东西,你不会声明i的类型为float,但是你将值'float'(它是一种类型)分配给名称'i'。如果你跟进 5*i,你的程序本质上意味着“5 次类型浮点”,这没有多大意义。

于 2013-04-03T15:47:17.687 回答
0

如果你得到 28*3 = 282828,那么实际上 28 是一个字符串。“28”*3 是“282828”。您可以将字符串更改为 int withint('28')或 float withfloat('28')

通过查看您的代码,我认为这正在发生

an=input("Atom Numarasini Giriniz  : ")

尝试将其更改为

an=int(input("Atom Numarasini Giriniz  : "))
于 2013-04-03T15:43:20.660 回答