【问题标题】:Can't concatenate str and int in Python无法在 Python 中连接 str 和 int
【发布时间】:2017-04-07 11:32:44
【问题描述】:

我正在尝试为学生数据库应用多级继承。我有namerollnoagemarkstotalaverage。我希望输出的形式为

Abc 1 21
Abc 1 21 98 79 88
Abc 1 21 98 79 88 255 85

我面临的错误是我无法连接 str 和 int。我可以理解问题是由于 str 中的名称和 int 中的其余部分。谁能帮帮我?

这是我的代码

import sys
class Person:
    def __init__(self, name,rollno,age):
        self.name = name
        self.rollno = rollno
        self.age=age
    def Name(self):
        return self.name + ", " + self.rollno + ",  "+ self.age

class Employee(Person):

    def __init__(self, name,rollno,age,m1,m2,m3):
        Person.__init__(self,name,rollno,age)
        self.m1 = m1
        self.m2 = m2
        self.m3 = m3

    def Getemployee(self):
        return self.name +"," + self.rollno +" ,"+ self.age +" ,"+ self.m1 +" ,"+ self.m2 +", "+ self.m3

class EmployeeDetails(Employee):
    def __init__(self, name,rollno,age,m1,m2,m3,total):
        Employee.__init__(self,name,rollno,age,m1,m2,m3)
        self.total=self.m1+self.m2+self.m3

    def empl(self):
        return self.name +" ,"+  self.rollno +" ,"+ self.age +", "+ self.m1 +", "+ self.m2 +" ,"+  self.m3 +" ,"+ self.total   
def main():
    try:
        n=int(raw_input("Enter the number of employees:"))
        for i in range(n):

            name =raw_input("enter the name:")
            rollno =raw_input("enter the rollno:")
            age =raw_input("enter the age:")
            m1 =raw_input("enter m1:")
            m2 =raw_input("enter m2:")
            m3 =raw_input("enter m3:")
            total =self.m1+self.m2+self.m3
            p = Person(name,rollno,age)
            e = Employee(name,rollno,age,m1,m2,m3)
            s= EmployeeDetails(name,rollno,age,m1,m2,m3,total)
            print p.Name()
            print e.Getemployee()
            print s.empl()

    except ValueError :
        print "value in error"
if __name__=='__main__':        
    main()

【问题讨论】:

  • 您需要使用 str() 将每个整数转换为字符串。
  • 为什么我的问题被否决了??

标签: python string inheritance int


【解决方案1】:

main() 不是任何类的方法;所以self 没有在那里定义。因此,将total =self.m1+self.m2+self.m3 更改为total =m1+m2+m3。 此外,每个用户输入都被定义为带有 raw_input() 的字符串,除了 n。所以,串联就可以了。

编辑:要回答您的评论,您只需要进行类型转换。尝试更好! 另外,在EmployeeDetails 类的__init__ 方法中更改为这个self.total=str(int(self.m1)+int(self.m2)+int(self.m3)) 以获得所需的结果。

P.S.:您可能想阅读this post on SO 的目的self

【讨论】:

  • 我的程序将 m1,m2,m3 视为字符串,因此我得到的总输出为 m1m2m3 值,而不是它的总和。如果我更改 total=int(m1)+int(m2)+int(m3),那么我不会在 s.empl 中获得所需的输出,因为 total 在 int 中并且名称将在 string 中,我得到它不能的错误连接 str 和 int
  • 不,它没有。将 total 的输出作为字符串的连接而不是将其值相加。例如:m1=2,m2=3,m3=4。我的总数应该是 9,但我得到的是 234
  • 我 main(),有 total = str(int(m1)+int(m2)+int(m3)) 并且在 EmployeeDetails 类中,有 self.total = total。这对我有用!
  • 我们的解决方案有效。谢谢 :) 我的问题需要被否决吗?
  • 那些投反对票的人一定觉得你有能力在谷歌上搜索如何转换数据类型。但是,不用担心。每个人都从头开始。我们学习:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2014-08-19
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多