所以这是我目前正在处理的代码,但我的老板对它的最后部分并不十分满意。有人能帮我吗?以下问题已标记。提前谢谢!
#!/usr/bin/python
def codeNameDict(lst, cnDict):
key = int(lst[0])
value = lst[1]
cnDict[key] = value
return cnDict
def realNameDict(lst, rnDict):
key = int(lst[0])
value = lst[2].strip()
rnDict[key] = value
return rnDict
def getCodeKey(keys):
import random
index = random.choice(keys)
return index
def searchKey(cnDict,value):
for x in cnDict.keys():
if(value == cnDict.get(x)):
return x
break;
def namegen(cnDict):
index1 = getCodeKey(cnDict.keys())
index2 = getCodeKey(cnDict.keys())
if(index1 == index2):
while(index1 == index2):
index2 = getCodeKey(cnDict.keys())
indexgen = [index1,index2]
else:
indexgen = [index1,index2]
return indexgen
cnDict = {}
rnDict = {}
f = open("namefile.txt")
try:
for line in f:
words = line.split(":")
cnDict = codeNameDict(words,cnDict)
rnDict = realNameDict(words,rnDict)
finally:
f.close()
# PROBLEMATIC SECTION #
for x in range(10):
indexgen = namegen(cnDict)
key1 = indexgen[0]
key2 = indexgen[1]
#print indexgen
#print key1
#print key2
pokemon1 = cnDict[key1]
pokemon2 = cnDict[key2]
realname1 = rnDict[key1]
realname2 = rnDict[key2]
print "Partners-> %s:%s" % (pokemon1, pokemon2)
print "RealNames-> %s:%s" % (realname1, realname2)
del cnDict[key1]
del cnDict[key2]
答案 0 :(得分:0)
你可以制作行
key1 = indexgen[0]
key2 = indexgen[1]
与一个人:
key1, key2 = indexgen[0], indexgen[1].
与pokemon1, pokemon2
和realname1, realname2
相同。
我也不会使用魔法值10
,而是给它命名。
答案 1 :(得分:0)
您的代码有一些改进。我们举个例子:
def getCodeKey(keys):
import random
index = random.choice(keys)
return index
这有效地返回random.choice
将返回的内容。我建议将import
语句移到文件的开头,然后使用random.choice
代替getCodeKey
(同样,它也是同样的事情)
其次,在searchKey
中,返回后不需要break
,因为返回已经从函数返回。但是,如果字典中的搜索值不是,则应考虑采取某些操作...
第三,
if(index1 == index2):
while(index1 == index2):
index2 = getCodeKey(cnDict.keys())
indexgen = [index1,index2]
else:
indexgen = [index1,index2]
return indexgen
if
没有必要,因为如果它不成立,则while
循环不会被执行。那么您也不需要else
,请注意您在if
和else
声明中为indexgen机器人设置了价值。此外 - 没有必要为您即将返回的值创建变量。我将其重写为
while(index1 == index2):
index2 = getCodeKey(cnDict.keys())
return [index1,index2]
对于range
部分,我唯一看到的是 halex 建议的内容,即将所有双重语句放入一行。
key1, key2 = indexgen[0], indexgen[1]
我不认为这种变化很大,但是......
这不完全是你所要求的,但正如你所说 - 你正在学习python,所以我认为这可能至少有点用处