我现在已经做了几个星期的项目,最后的截止日期已经到了tommorow,我已经完成了我所设置的所有任务,我已经尝试了至少几个星期了在我自己,但我只是可以得到它,所以如果somone可以帮助我,我会真的apreciate它。任务是创建一个程序,保存创建到txt文件的数据,这是我的代码到目前为止;
import random
char1=str(input('Please enter a name for character 1: '))
strh1=((random.randrange(1,4))//(random.randrange(1,12))+10)
skl1=((random.randrange(1,4))//(random.randrange(1,12))+10)
print ('%s has a strength value of %s and a skill value of %s)'%(char1,strh1,skl1))
char2=str(input('Please enter a name for character 2: '))
strh2=((random.randrange(1,4))//(random.randrange(1,12))+10)
skl2=((random.randrange(1,4))//(random.randrange(1,12))+10)
print('%s has a strength value of %s and a skill value of %s'%(char1,strh1,skl1))
char1[1]="Strength now {} ".format(strh1)
char1[2]="Skill now {} ".format(skl1)
char2[1]="Strength now {} ".format(strh2)
print()
char2[2]="Skill now {}".format(skl2)
print()
myFile=open('CharAttValues.txt','wt')
for i in Char1:
myFile.write (i)
myFile.write ('\n')
for i in Char2:
myFile.write (i)
myFile.write('\n')
myFile.close()
现在我试图让它写入一个txt,但是当它到达程序的最后它不能正常工作它意味着保存我得到这个错误:
Traceback (most recent call last):
File "E:\CA2 solution.py", line 14, in <module>
char1[1]="Strength now {} ".format(strh1)
TypeError: 'str' object does not support item assignment
我不确定如何让它工作,如果有人可以帮助我在python 3.3.2中使用它,我会非常感激,因为我的截止日期是明天,如果我不接手会有不良后果它是正确的,它只是我一直试图自己解决它现在,我没有任何时间离开所以如果有人能让它工作,我会非常感激,非常感谢任何帮助
答案 0 :(得分:0)
什么python认为你试图改变char1的第二个角色 - 你做不到 - 而且我不确定你是不是想要这样做 - 因为char1已经是你的第一个角色的名字了 - 见第3行你的文件。
我从你试图使char1实际上是关于字符1的数据的代码中得知,如果是这样,你可能想使用字典来保存数据 - 这样你就可以使用键来命名,强度,和角色的技巧 - 这是一种非常pythonic的做事方式。
如果您使用字典,则还需要更改循环。
注意:更好的方法是拥有一个字符类 - 它包含有关字符的所有数据,并且具有专门的输出方法 - 但我认为现在远远超出了你。
答案 1 :(得分:0)
这是一次非常严厉的重写;如果你追踪它,你应该学到很多东西; - )
首先,我认为你的随机强度代码非常不透明 - 它根本不清楚会产生什么样的值 - 所以我写了一个辅助函数:
from bisect import bisect_left
import random
def make_rand_distr(value_odds):
"""
Create a discrete random-value generator
according to a specified distribution
Input:
value_odds: {x_value: odds_of_x, y_value: odds_of_y, ...}
Output:
function which, when called, returns one of
(x_value or y_value or ...) distributed
according to the given odds
"""
# calculate the cumulative distribution
total = 0.
cum_prob = []
values = []
for value,odds in value_odds.items():
total += odds
cum_prob.append(total)
values.append(value)
# create a new function
def rand_distr():
# generate a uniformly-distributed random number
rnd = random.random() * total
# use that to index into the cumulative distribution
index = bisect_left(cum_prob, rnd)
# then return the associated value
return values[index]
# return the new function
return rand_distr
并使用它来制作更明确的力量和技能函数(结果值分布与您的代码相同):
# When you call rand_strength(), you will get
# Value Odds
# 10 27/33
# 11 4/33
# 12 1/33
# 13 1/33
rand_strength = make_rand_distr({10: 27, 11: 4, 12: 1, 13: 1})
rand_skill = make_rand_distr({10: 27, 11: 4, 12: 1, 13: 1})
(请注意,这可以让您轻松创建任意分布,与任何明显函数不对应的分布);
然后我写了一个Character类:
class Character:
def __init__(self, ch):
self.name = input(
"Please enter a name for character {}: "
.format(ch)
).strip()
self.strength = rand_strength()
self.skill = rand_skill()
def __str__(self):
return (
"{} has strength={} and skill={}"
.format(self.name, self.strength, self.skill)
)
def __repr__(self):
return (
"{name}:\n"
" Strength now {strength}\n"
" Skill now {skill}\n"
.format(
name = self.name,
strength = self.strength,
skill = self.skill
)
)
并像这样使用它:
NUM_CHARS = 2
OUT_FILE = "char_attr_values.txt"
def main():
# create characters
chars = [Character(ch) for ch in range(1, NUM_CHARS+1)]
# display character stats
for char in chars:
print(char) # calls char.__str__ implicitly
# save character data to output file
with open(OUT_FILE, "w") as outf:
for char in chars:
outf.write(repr(char)) # delegates to char.__repr__
if __name__=="__main__":
main()