Python 只需要一个关于range()的小代码
这是我目前正在编写的代码,但我的老板对最后一部分不太满意。有人能帮我吗?下面的问题已标记。提前谢谢Python 只需要一个关于range()的小代码,python,range,Python,Range,这是我目前正在编写的代码,但我的老板对最后一部分不太满意。有人能帮我吗?下面的问题已标记。提前谢谢 #!/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 = l
#!/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]
你可以排队
key1 = indexgen[0]
key2 = indexgen[1]
致有以下情况的人:
key1, key2 = indexgen[0], indexgen[1].
与pokemon1、pokemon2
和realname1、realname2
相同。
我也不会使用神奇的值
10
,而是给它起个名字。您的代码有几处改进。让我们举个例子:
def getCodeKey(keys):
import random
index = random.choice(keys)
return index
这有效地返回了random.choice
将返回的内容。我建议将import
语句移到文件的开头,并使用random.choice
而不是getCodeKey
(同样,这也是一样的)
其次,在searchKey
中,返回后不需要中断
,因为return已经从函数返回。但是,如果搜索值不在字典中,则应该考虑一些动作…
第三,
if(index1 == index2):
while(index1 == index2):
index2 = getCodeKey(cnDict.keys())
indexgen = [index1,index2]
else:
indexgen = [index1,index2]
return indexgen
如果
不是必需的,因为如果它不是真的,while
循环将不会执行。然后您也不需要else
,请注意,您正在if
和else
语句中将值设置为indexgen bot。另外,不必为要立即返回的值创建变量。我会把它改写成
while(index1 == index2):
index2 = getCodeKey(cnDict.keys())
return [index1,index2]
至于范围
部分,我只看到halex所建议的,即将所有双语句放在一行中
key1, key2 = indexgen[0], indexgen[1]
我不认为这会有多大变化,尽管
这并不完全是您要求的,但正如您所说的,您正在学习python,因此我认为这可能至少有点有用,因为严重破坏了格式|为什么你的老板对它不满意?可能是因为
10
范围(10)中的魔法值10
?我想他希望它更简单。我刚开始学习python:|@caughtdaydreaming您可以将行key1=indexgen[0]\nkey2=indexgen[1]
变成一行:key1,key2=indexgen[0],indexgen[1]
。口袋妖怪和realname也一样。