如何在python中初始化类中列表元素的值


def __init__(self):
self.planets = ['Mercury', 'Venus', 'Mars',
'Jupiter', 'Saturn','Uranus',
'Neptune', 'Pluto']
self.planets[0] = 0.38
self.planets[1] = 0.91
self.planets[2] = 0.38
self.planets[3] = 2.34
self.planets[4] = 0.93
self.planets[5] = 0.92
self.planets[6] = 1.12
self.planets[7] = 0.62
def calculate_spaceweight(self, weight):
for i in range(len(self.planets)):
print("your weight on", self.planets[i], " is", weight * self.planets[i] )
if __name__ == '__main__':
weight = float(input("what is your Earthly weight: "))
obj1 = Planet()
print(obj1.calculate_spaceweight(weight))

输出是错误的,我知道有更好的方法来初始化列表中的值,但我不知道如何。下面是它输出的内容:

your weight on 0.38  is 57.0
your weight on 0.91  is 136.5
your weight on 0.38  is 57.0
your weight on 2.34  is 351.0
your weight on 0.93  is 139.5
your weight on 0.92  is 138.0
your weight on 1.12  is 168.00000000000003
your weight on 0.62  is 93.0
None

好的,我做了一个编辑,所以它现在输出正确的答案

使用

self.planets[0] =  0.38

您正在更改0。指数"Mercury"0.38

如果你想要更合适的方法,你可以像这样使用字典

self.planets = {"Mercury": 0.38, "Venus": 0.91}

和for循环

for planet_name, planet_arg in self.planets.items():
print("your weight on", planet_name, " is", weight * planet_arg)
def __init__(self):
self.planets = {
'Mercury' : 0.38 , 
'Venus'   : 0.91 , 
'Mars'    : 0.38 ,
'Jupiter' : 2.34 , 
'Saturn'  : 0.93 ,
'Uranus'  : 0.92 ,
'Neptune' : 1.12 , 
'Pluto'   : 0.62 }
def calculate_spaceweight(self, weight):
for planet in self.planets:
print("your weight on", planet, " is", self.planets[planet] * weight)
if __name__ == '__main__':
weight = float(input("what is your Earthly weight: "))
obj1 = Planet()
print(obj1.calculate_spaceweight(weight))

正如John所说,你不能将名字和权重保存在列表中,这不是它们在python中的工作方式。然而,字典可以存储按键索引的值。

保存键值对的字典是更适合您所需的数据结构。字典提供了基于键的值的快速查找。

但是,由于您从不根据行星名称查找乘数,而只遍历整个字典,因此您也可以使用元组列表。在这个列表中,每个元素都是一个元组,其第一个元素是行星的名称,第二个元素是行星的权重乘数。

def __init__(self):
self.planets = [('Mercury', 0.38), ('Venus', 0.91), ('Mars', 0.38),
('Jupiter', 2.34), ... and so on ]
def calculate_spaceweight(self, weight):
for planet_info in self.planets:
planet_name = planet_info[0]  # First element of the tuple is the planet name
planet_mult = planet_info[1]  # Second element is the multiplier
print("your weight on", planet_name, " is", weight * planet_mult) 

请注意我对for i in range(len(self.planets))循环的修改:循环列表的元素比它的索引更python,所以我把它改成了for planet_info in self.planets。现在,在每次迭代中,planet_info包含列表中的一个元素,例如,在第一次迭代中planet_info = ('Mercury', 0.38)


看到像你叫Planet类,这个类的对象应该代表一个星球。下面是我要做的:

class Planet:
def __init__(self, name, weight_multiplier):
self.name = name
self.weight_multiplier = weight_multiplier
def calculate_spaceweight(self, weight):
return self.weight_multiplier * weight

现在,在主程序的一部分,使这些行星:

# Create an empty list
planets = [] 
# Add all planets to it
planets.append(Planet('Mercury', 0.38))
planets.append(Planet('Venus', 0.91))
planets.append(Planet('Mars', 0.38))
planets.append(Planet('Jupiter', 2.34))
planets.append(Planet('Saturn', 0.93))
planets.append(Planet('Uranus', 0.92))
planets.append(Planet('Neptune', 1.12))
planets.append(Planet('Pluto', 0.62))
# Ask for user's weight
weight = float(input("Enter your Earth weight: "))
# Loop over all Planet objects in the planets list
for planet in planets:
# Calculate weight on this planet
planet_weight = planet.calculate_spaceweight(weight) 
# Print message
print(f"Your weight on {planet.name} is {planet_weight}")

面向对象编程的要点在于一个类将封装与该类对象相关的所有属性和方法。例如,你可以在Planet类中添加revolution_period这样的属性,并添加一个方法,用它来计算你的年龄(以"行星年"为单位)。给定"地球年":

class Planet:
def __init__(self, name, weight_multiplier, revolution_period_days):
self.name = name
self.weight_multiplier = weight_multiplier_days
self.revolution_period = revolution_period
def calculate_space_weight(self, weight):
return self.weight_multiplier * weight
def calculate_space_age(self, age):
return 365 / self.revolution_period * age
mars = Planet("Mars", 3.72/9.81, 687)
# Ask for user's weight
weight = float(input("Enter your Earth weight (in kg): "))
print(f"You would weigh {mars.calculate_space_weight(weight)}kg on Mars")
# Ask for user's age
age = float(input("Enter your Earth age (in years): "))
print(f"You are {mars.calculate_space_age(age)} Mars-years old")