2017-08-20 7 views
0

私は簡単な質問がありますが、実際にはそれに対して正しい解決策を見つけることはできません。 名、subject1、subject2、subject3 STUDENT1、MN1、MN2、MN3 Student2、BN1、BN2、BN3 Student3、MN4を:Python 3.4の入力値とcsvファイルとの比較

は、私は彼らが登録されている学生の名前や科目が含まれているCSVファイルを持っています、MN5、MN6は

学生は、彼がこの主題に登録されているかどうかをチェックするために、彼の名前とサブジェクト名を入力する必要が

マイコード:

import csv 

Name = input("Please provide your name: ") 
Subject = input("Please provide your Subject: ") 

with open('students.csv') as csvfile: 
    reader = csv.DictReader(csvfile) 
    for row in reader: 
     if (row['name'] == Name and row['subject1'] == Subject or 
row['subject2'] == Subject or row['subject3'] == Subject): 
      print ("You are registered. It won't take long to run your VM") 
     else: 
      print ("You are not registered") 

私の問題は、それが私に 出力を複数の出力を与えることである。 あなたの名前を入力してください:Student3 あなたの件名を入力してください:MN4 あなたはあなたがあなたが登録されている に登録されていない 登録されていません。あなたのVMを実行するのに時間がかかりません

明らかに、それはちょうど: あなたが登録されている必要があります。あなたのVMを動かすのに時間がかかりません

この問題を解決するために私を助けてください。 は... Pythonでforループは、ループがbreak声明なしで終了したときに実行されるオプションのelse句を持っていることをあなたは

答えて

1

あなたのコードが印刷ループの各反復をありがとうございます。あなたが望むのは、ループの最後にのみ印刷することです...

with open('students.csv') as csvfile: 
    reader = csv.DictReader(csvfile) 
    for row in reader: 
     if (row['name'] == Name and (row['subject1'] == Subject or row['subject2'] == Subject or row['subject3'] == Subject)): 
      print("You are registered. It won't take long to run your VM") 
      break 
    else: 
     print("You are not registered") 
+0

感謝の男、それが動作ではなく、最後の反復のために、それは最初の反復後に停止 – Ruslan

0

データフレームは、CSVファイルを保存するのに適した構造になります。とにかくあなたのコードに来てくださいhereを読んでください。以下のコードを参照してください。

この

pip install pandas 
pip install numpy 

コードのためのパンダとnumpyのをインストールしてください:

import pandas as pd 
import numpy as np 

df = pd.read_csv("testing.csv") 

Name = input("Please provide your name: ") 
Subject = input("Please provide your Subject: ") 

query = '(name == '+ '\'' + Name + '\'' + ') and (subject1 == '+ '\'' \ 
     + Subject + '\'' + ' or subject2 == ' + '\'' + Subject + '\'' \ 
     + ' or subject2 == ' + '\'' + Subject + '\')' 

if df.query(query).empty: 
    print ("You are registered. It won't take long to run your VM") 
else: 
    print ("You are not registered") 

参考:

  1. pandas query
0

私は辞書があなたのために最高の仕事と考えている:

import csv 

data = {i[0]:i[1:] for i in csv.reader(open('filename.csv'))} 

Name = input("Please provide your name: ") 
Subject = input("Please provide your Subject: ") 

if Subject in data[Name]: 
    print("you are registered") 
else: 
    print("you are not registered") 
+0

データ= {I [0]:I [1 :] for i for csv.reader(open( 'filename.csv'))} - この行を説明してください。 ありがとうございます、それは動作します。 – Ruslan

+0

@Ruslanその行は辞書の理解と呼ばれます。あなたのcsvファイルから各行を取り、最初の要素、 'i [0]'で辞書のキーを作成します。次に、この辞書の値はリストスライシングを使用して作成されます。このスライスは、リストの右半分を2番目の要素から始めることで 'i'を変更します。 – Ajax1234

+0

ありがとう! あなたが気にしないと別の質問が出る 名前と件名が一致している場合に使用する必要がある2番目のCSVファイルを追加しています...したがって、2番目のCSVファイルの別の辞書を追加する必要がありますか? – Ruslan

関連する問題