2017-06-26 12 views
0

私はかなり新しいPythonを使用する月です。私は機能に関する質問とそれらを実装する方法を持っていました。この種の質問が以前に尋ねられたなら、私は謝罪し、正しい方向に振り向けばそれを大きく評価するでしょう。ここに私のコードは次のとおりです。関数を書くこととPythonで実装する

def getvalues(num1, num2): 
     for k in range(0, len(num1)): 
      if num1[k] > num2: 
       num1[k] = 0 
       num1 = int(input('Please enter a integer value, or quit to quit: ')) 
       while num1 not in 'quit': 
        num1 = int(input('Please enter a integer value, or quit to quit: ')) 
        if num1 in 'quit': 
         num2 = int(input('Please enter a threshold value: ')) 
    getvalues 

私がやろうとしていますどのような入力に整数値をユーザーを取得し、ユーザーのタイプは「終了」ときに、それがしきい値をお願いします、とだけ表示されます整数は閾値を超えています。私は関数が正しいと信じて、私は問題を機能を実装しようとしている。最後にgetvaluesを呼び出して関数を呼び出します。私は関数の後に入力を求めるべきですか?あるいは、それを関数にすべて入れて呼び出し、そのようにユーザー入力を得ることは可能ですか?私はデータをリストに表示したい。私は立ち往生しており、どんな助けにも大いに感謝しています。

+0

問題を明確にしてください。間違いはありますか?もしそうなら、投稿してください。そうでなければ、あなたのコードは何を行い、それがあなたがしたいこととどのように違うのですか? – stybl

+0

また、最後の行で、関数を呼び出すためにカッコを追加する必要があります。 'getvalues'を' getvalues'に変更してください。(ここでは[1引数]、[2引数はここで]) – stybl

+0

入力を 'int'に変換し、' 'stop''と比較すると動作しません。そして、あなたは「停止」または「終了」を意味しますか? –

答えて

2

あなたはこのようなものを望むようです。あなたがしたい2つのものを分割して(値を取得し、閾値よりも高いものをフィルタリングする)2つの関数に分けるほうが簡単かもしれません。これにより、混乱を招く可能性のあるネストされたforループを使用するのではなく、プログラムの流れを理解しやすくなります。

まず、get_valuesを呼び出して、値を入力してリストに追加します(inputted_values)。ユーザーがquitを入力すると、そのリストが返されます。 2番目の関数mainを呼び出すと、get_valuesが表示され、ユーザーはしきい値の入力を求められ、そのしきい値を超えるすべての値が出力されます。我々は、ユーザが入力したかどうかをチェックした後まで、intに最初の関数で入力を変換しないことも

def get_values(): 
    inputted_values = [] 
    while True: 
     num = input('Please enter a integer value, or quit to quit: ') 
     if num == 'quit': 
      return inputted_values 
     inputted_values.append(int(num)) 

def main(): 
    my_values = get_values() 
    threshold = int(input('Please enter a threshold value: ')) 
    print([x for x in my_values if x > threshold]) 

main() 

注(文字列)「を終了します」。どちらの関数もパラメータを必要としません。なぜなら、それらにデータを渡すのではないからです。しかし、returnまたはprintを確実にする必要があります。

+0

ありがとう!わかりやすくするために、2つの機能を持つことによって、理解しやすくしています。リストに入力したいので、リストを表す[]に入力値を代入します。これはTrueで、整数値を入力するように要求します。numが 'quit'の場合、入力値を返します。しかし、コードをそこで終わらせないだろうか?私はそのコンセプトをよりよく理解しようとしています。最初にget_values()関数を呼び出してから、main()関数を呼び出しますか?それとも書かれているように動くのだろうか? –

+0

私のわずかな編集を参照してください: 'main()'を呼び出す必要があります。これは 'get_values()'を呼び出します。 'get_values'の' return'はコントロールを 'main'に戻します。 'main'の最後のコマンドが実行されると、プログラムは終了します。 – Stuart

+0

main()を呼び出すとget_values()が呼び出されるのはなぜですか? –

0

現在の機能にはいくつかの問題があります。最大のものは、異なる場所で複数の異なるものに使用される変数名について混乱するようです。あなたは、あなたのコードのすべてを、私が役に立たないと考える方法で入れ子にしました。

あなたの説明から、あなたのコードは2つの主要なステップを経ることを望みます。最初の手順では、番号の代わりにquitと入力するまで、ユーザーに複数の番号(一度に1つずつ)を要求します。 2番目のステップは、しきい値を求めて、それ以上の最初のステップからすべての値をプリントアウトする(またはreturn?)ことです。ここで

は、私はそれを行うだろう方法は次のとおりです。

def getvalues(): # note, no arguments, we gather all the data inside the function 
    values = [] # start with an empty list, with a good variable name 
    while True: # loop indefinitely 
     entry = input('Please enter a integer value, or quit to quit: ') 
     if entry == 'quit': 
      break # stop the loop if the user types quit instead of a number 
     values.append(int(entry)) # convert to a number only after checking for "quit" 

    threshold = int(input('Please enter a threshold value: ')) # use a good variable name 
    for value in values: # loop over the values gathered above 
     if value >= threshold: # compare each value to the threshold 
      print(value)  # and print the ones that are larger 

あなたはまた、より大きな方法で物事を再編成することができます。例えば、閾値によるフィルタリングは、ユーザに入力値を求めることとは別の機能で行うことができる。または、しきい値を最初に要求した場合は、ユーザー入力を取得すると同時にフィルタリングを実行できます(後でフィルタリングするのではなく、しきい値よりすぐに値を削除する)。

+0

あなたの#コメントは非常に役に立ちます。あなたの答えと上記のものとのわずかな違いがありますが、彼は2つの機能を使いましたが、あなたはちょうどそのようなものを持っているようです。それは大きな違いがありますか?それともそれをフォーマットするのが好きですか? –

+0

あなたは、できるだけ多くの、または少しでも分割することができます。別の機能に何かがあるべきかどうかを判断する一般的な方法は、複数回の呼び出しが可能かどうかということです。 – Blckknght

関連する問題