2017-03-16 5 views
0

このPythonプログラムは、ランダムな名前の果物や動詞のリストを読み込み、リストにそれらをソートし、そのランダムな文章をプリントアウトするために私を必要としています意味をなさない私はどのようにランダムな文を生成するのに苦労しています。私はソートされたリストを持っていますが、 'pick'は定義されていません。ここランダムな名前のリストで読む、過去形の動詞や果物、ランダムに文章を作成

は私の関数である。ここで

def getData(): 
    list = [] 
    name_list = [] 
    fruit_list = [] 
    verb_list = [] 

name_input = input() 
fruit_input = input() 
verb_input = input() 

seperator = ',' 

namestr = name_input.split(seperator) 
fruitstr = fruit_input.split(seperator) 
verbstr = verb_input.split(seperator) 

name_list.append(namestr) 
fruit_list.append(fruitstr) 
verb_list.append(verbstr) 

list = name_list + fruit_list + verb_list 

return list 

は(問題に与えられた)文を作成する主な機能です:

def main(): 
    seed = int(input()) 
    print("The seed is", seed) 
    names,verbs,fruit = getData() 
    print("NAMES:", names) 
    print("VERBS:", verbs) 
    print("FRUIT:", fruit) 
    random.seed(seed) 
    for i in range(10): 
     n = pick(names, random.randint(1,1000)) 
     v = pick(verbs, random.randint(1,1000)) 
     f = pick(fruit, random.randint(1,1000)) 
    print(n,v,"the",f) 


if __name__ == "__main__": 
    main() 

出力:

The seed is 42 
NAMES: ['Adam', 'Betty', 'Charlie', 'Debbie', 'Elaine', 'Frank' 'George', 'Harry', 'Igor', 'Jack', 'Kevin', 'Larry', 'Moe', 'Nancy', 'Ophelia', 'Phil', 'Quentin'] 

VERBS: ['had', 'found', 'got', 'made', 'knew', 'took', 'saw', 'wanted', 'used', 'found', 'tried'] 

FRUIT: ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape'] 

Traceback (most recent call last): 
    File "main.py", line 59, in <module> 
     main() 
    File "main.py", line 51, in main 
     n = pick(names, random.randint(1,1000)) 
    NameError: name 'pick' is not defined 

すべてのヘルプ高く評価され:)

+1

それが言うように、ピックが定義されていません。ピックのような機能はありません。あなたがリストからランダムな要素を選択したい場合は、チェックアウト '[random.choice](https://docs.python.org/3.6/library/random.html#random.choice) – bosnjak

+0

チェックアウトrandom.shuffle' – Jerfov2

+0

@bosnjak 'random.shuffle'は彼が望むものではありません。 'random.shuffle'がそのリストをシャッフルします – Jerfov2

答えて

0

あなたがmain機能を変更することが許可されていない場合は、あなたがmainのコードを見て、学ぶことができるカップルのポイントがあります。

FIRSTラインnames,verbs,fruit = getData()getData()が実際に3つの別々のを返していることを示していますリストは、彼らはnamesverbs、およびfruit変数にPythonの魔法を経由して割り当てられています。そのためにreturn (name_list, verb_list, fruit_list):だからあなたのgetData()機能は、このようなタプルの3つのリストを返す必要があります。エラーメッセージから発見されたよう

SECONDは、機能pickは存在しないので、ライン(S)pick(fruit, random.randint(1,1000))あなたは書き込みからアイテムを返しますpickと呼ばれる関数に必要なことを教えなければなりません渡された整数に基づいて与えられたリストあなたがの摂取を短縮することができます

def pick (items, i): 
    return items[i % len(items)] 

最後:おそらく、あなたはこの整数をどうするかのように、余分な命令を持っていますが、私はあなたがそのインデックスにある項目を取得するために、剰余演算を使用することができ引き受ける、そのような各行に1つずつの入力(エラー処理を考慮する必要がない場合)。だから、すべて一緒に、あなたのgetData機能は次のようなものを探して終わる可能性:

def getData(): 
    separator = ',' 
    name_list = input().split(separator) 
    verb_list = input().split(separator) 
    fruit_list = input().split(separator) 
    return (name_list, verb_list, fruit_list) 
+0

変更したくない本番(機能)の「メイン」部分を修正するものはありませんか?または、私がgetData()を作成した関数でrandom.choiceを使用する必要がありますか?ピックが定義されておらず、ピックを使用しなければならないと言っています。なぜなら、これをやっても機能を編集できないと言うからです。私はこの場所をどこに置くべきかについて混乱しました。 – ComSci

+0

追加: 'seed'変数はこれと関連がありますか? – ComSci

+0

ああ、あなたはmain関数の内容を変更できませんか?その場合、 'pick'という関数を書く必要があります。その 'pick'関数は' random.choice'を実装できます –

0

これはあなたのアイデアを与える必要があります。

import random 
NAMES = ['Adam', 'Betty', 'Charlie', 'Debbie', 'Elaine', 'Frank' 'George','Harry', 'Igor', 'Jack', 'Kevin', 'Larry', 'Moe', 'Nancy', 'Ophelia', 'Phil', 'Quentin'] 
VERBS = ['had', 'found', 'got', 'made', 'knew', 'took', 'saw', 'wanted', 'used', 'found', 'tried'] 
FRUIT = ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape'] 

sCounter = 0 
fCounter = 5 



while sCounter <= fCounter: 
    sCounter += 1 
    print("{0} {1} the {2}").format(random.choice(NAMES),random.choice(VERBS),random.choice(FRUIT)) 

出力:

Quentin found the fig 
Betty found the date 
Kevin used the cherry 
Nancy got the grape 
Larry used the cherry 
Jack wanted the cherry 
関連する問題