-1

これが私が現在取り組んでいるコードですが、私の上司はその最後の部分にあまり満足していません。誰かが私を助けることができますか?以下の問題はマークされています。前もって感謝します!

#!/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]
4

2 に答える 2

0

あなたは線を作ることができます

key1 = indexgen[0]
key2 = indexgen[1]

と1つに:

key1, key2 = indexgen[0], indexgen[1].

pokemon1, pokemon2 と同じrealname1, realname2。また、魔法の値は使用しません10が、名前を付けます。

于 2012-08-31T08:27:25.943 に答える
0

コードにいくつかの改善があります。たとえば、次のように考えてみましょう。

def getCodeKey(keys):
import random
index = random.choice(keys)
return index

これは、返されるものrandom.choiceを効果的に返しています。importステートメントをファイルの先頭に移動し、random.choice代わりに使用することをお勧めしますgetCodeKey(繰り返しますが、同じことです)

第 2 に、return は既に関数から返されているため、return 後にsearchKeyする必要はありません。breakただし、検索された値が辞書にない場合は、何らかのアクションを検討する必要があります...

三番、

if(index1 == index2):
 while(index1 == index2):
  index2 = getCodeKey(cnDict.keys())
  indexgen = [index1,index2]

else:
  indexgen = [index1,index2]
return indexgen

iftrue でない場合、whileループは実行されないため、必須ではありません。else次に、同様に必要はありません。and ステートメントで indexgen botifに値を設定していることに注意してelseください。また、とにかくすぐに返す値の変数を作成する必要はありません。私はそれを

 while(index1 == index2):
  index2 = getCodeKey(cnDict.keys())

return [index1,index2]

部分に関してrangeは、私が見るのは、ハレックスが提案したもの、つまりすべての二重ステートメントを1行に入れることだけです。

key1, key2 = indexgen[0], indexgen[1]

あまり変わらないと思いますが…

それはまさにあなたが求めたものではありませんが、あなたが述べたように-あなたはPythonを学んでいるので、これは少なくとも少しは役立つと思います.

于 2012-08-31T08:36:48.203 に答える