如何通过python中的for循环创建具有随机属性值的对象?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何通过python中的for循环创建具有随机属性值的对象?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1799字,纯文字阅读大概需要3分钟。
内容图文
![如何通过python中的for循环创建具有随机属性值的对象?](/upload/InfoBanner/zyjiaocheng/726/db1765bc12e54429a241e1a84a33335b.jpg)
美好的一天,每次我通过for循环创建一个对象时,我无法使我的属性值随机.我在这段代码中的目标是,当我实例化一个对象时,每个对象的self.hunger和self.boredom都有不同的值,从0到20,但每次我通过for循环打印生物字典时,他们的self.hunger和self.boredom是一样的.我该如何随意制作?你能解释一下为什么我的代码不起作用吗?这是我的一些代码.任何答案都非常感谢.
class Critter(object):
"""A virtual pet"""
import random
def __init__(self, name, hunger = random.randrange(0, 21), boredom = random.randrange(0, 21)):
self.name = name
self.hunger = hunger
self.boredom = boredom
def __str__(self):
rep = "\nCritter object\n"
rep += "Name: " + str(self.name) + ", Hunger: " + str(self.hunger) + ", Boredom: " + str(self.boredom)
return rep
def main():
critters = {}
crit_name = input("What do you want to name to your critter?: ")
critters[1] = Critter(crit_name)
choice = None
while choice != "0":
print ("""
Critter Caretaker
0 - Quit
1 - Listen to your critters
2 - Feed your critters
3 - Play with your critters
4 - Create another critter
""")
elif choice == "4":
crit_name = input("What do you want to name your critter?: ")
for i in range(len(critters) + 1, 11):
critters[i] = Critter(crit_name)
break
if i == 10:
print("\nMaximum critters reached. Cannot create another critter.")
如果你想让整个程序理解我的问题,我会编辑我的问题.请帮我.
解决方法:
发生这种情况是因为您将随机值作为默认参数传递,并且它们仅被评估一次.试试这种方式:
import random
class Critter(object):
"""A virtual pet"""
def __init__(self, name, hunger=None, boredom=None):
self.name = name
self.hunger = hunger if hunger is not None else random.randrange(0, 21)
self.boredom = boredom if boredom is not None else random.randrange(0, 21)
def __str__(self):
rep = "\nCritter object\n"
rep += "Name: " + str(self.name) + ", Hunger: " + str(self.hunger) + ", Boredom: " + str(self.boredom)
return rep
内容总结
以上是互联网集市为您收集整理的如何通过python中的for循环创建具有随机属性值的对象?全部内容,希望文章能够帮你解决如何通过python中的for循环创建具有随机属性值的对象?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。