2017-10-14 7 views
1

私は最近、Pythonに興味を持ち、オンラインで見つけた簡単なクイズタスクで自分自身に挑戦することに決めました。それは物事がより明確になります場合は、完全なタスクはここで見つけることができます:テキストファイルから情報を呼び出すログインプログラムを作成する

私がこれまで行ってきたどのような「https://gyazo.com/35426cce2c0f177b37031ea6a87b2ce9

:名前、年齢とパスワードの入力を求め

  1. 先ほど入力した名前と年齢からユーザ名を作成しました(上のスクリーンショットのタスク1)

  2. カンマで区切られた外部テキストファイルにユーザー名とパスワードを格納しました。私は助けを必要と何

    name = input("Please enter your name. ") 
    age = input("Now please enter you age. ") 
    
    username = name[0:3] + age 
    print ("Your username has been created and is", username, ".") 
    
    password = input("Now please create a password. ") 
    
    file = open("Login.txt","a") 
    file.write (username) 
    file.write (",") 
    file.write (password) 
    file.write("\n") 
    file.close() 
    
    print ("Your login details have been saved. ") 
    

    :それは、これまでのように見える何

基本的に私は、ログインプログラムを作成するために苦労しています。ユーザ名とパスワードを尋ねるものと、ユーザ名とパスワードがテキストファイルにあるかどうかを確認し、そうでない場合は、続行するために名前、年齢、パスワードを入力してアカウントを作成するよう促します。

ご協力いただきますようお願い申し上げます。どこにいても明確でない場合は、100%明確にすることが重要であることを私が知る限り、より具体的にする必要がある場所を自由に聞くことができます。

+0

注目。編集されたコードはポストにあり、スクリーンショットでは表示されません。 – Keyee

+0

あなたは#1で本当に助けを必要としません。#2、#3、#4は#2にまで下がります。この仕様のリストは、実際にはそうではない間に、あなたの質問を「私のhw」のように見せます。私たちは物語全体を知る必要はなく、必要なものについて尋ねるだけです。 – Neo

+0

少しの文脈を与えることで物事を理解しやすくすると思っていたので、数字を含めました。それにもかかわらず、あなたが言うように私は今必要なものだけ編集されています。ありがとう。 – Keyee

答えて

0

あなたのコードを見てみると、あなたのLogin.txtファイルは次のようになります:

some_user,some_pass 
some_other_user,some_other_pass 

を供給し、ユーザ名とパスワードを検証するために、我々は、行毎にファイルを調べ、その後、調べる必要があります行のさまざまな部分を確認する: a)ユーザー名がファイルにある場合、およびb)ユーザー名に指定されたパスワードが一致する場合

logged_in = False 
with open('Login.txt', 'r') as file: 
    for line in file: 
     username, password = line.split(',') 
     # Check the username against the one supplied 
     if username == supplied_username: 
      logged_in = password == supplied_password 
      break 

if logged_in: 
    # Proceed to the quiz... 
else: 
    # Register user 

ていない場合は、テキストファイルで、アカウントを作成するプロンプトが表示されます。次に、通常のクイズを続行します。

ファイルに含まれていないユーザー(登録されていないクイズユーザー)と、ファイル内にありますが無効なパスワードが入力されたユーザー名を区別する必要があります。前者が登録につながるのは理にかなっています。後者ではありません。

0

ファイル内でデータに一致するレコードを検索する必要があります。

ユーザ名がneo123、パスワードがsecureのユーザがいつもログインしている場合は、neo123,secureがファイルに含まれていると思われます。

rモードでファイルを開き、readlines()を呼び出すと、文字列のリストが表示されます。それぞれがファイルからの行です。in演算子を使用して、行がリスト内にあるかどうかを調べることができます。これは、ファイル内にあることを意味します。

0

プログラミングの基本的な部分は、問題を解決することを学ぶまで、問題を細かく分割し、さらに小さな部分に分割することを学ぶことです。最終的にあなたは十分に良くなり、十分に経験して、すぐに作品を見ることができます。

既に上記の第1レベルの内訳があります。あなたはそれぞれのステップを何かに分ける必要があります。

def main(): 
    username, password = get_name_and_password() 
    registered_users = read_pwdfile('pwd_filename') 
    if usr_pass_registered(username, password, registered_users): 
     registered = True 
    else: 
     registered = get_registration(username, password, 'pwd_filename') 
    if registered: 
     run_quiz(username) 

今、あなたは独立して取り組むことができる4つのサブ問題があります。だからあなたのハイレベルのコードは次のようなものです。彼らはまた、自信を持って一緒に戻って参加することができるように、独立してテストすることもできます。

get_name_and_password()あなたは既にコードを書いていることを示しています。それをサブルーチンに移動し、最後に入力された2つの値のタプルを返します。

read_pwd(filename)は、指定された名前でファイルを開き、その内容をデータ構造体に読み込み、ファイルを閉じて、データ構造体を返す必要があります。あなたのデータにどのような構造を使用するかは、プログラム学習のもう一つの部分です。ここでは、空のリストを作成し、ファイルから読み込んだ行ごとに(user, pwd)のタプルをリストに追加することをお勧めします。ファイルが存在しない場合は世話をしたいので、try: ... except FileNotFoundError:コードブロックをコーディングすることを学ぶ必要があります。

usr_pass_registered(username, password, registered_users)は登録ユーザのリストを繰り返し、見つかった場合はTrueを返します。これにより、registered_usersのデータ構造を反復するforループを作成する際の経験が得られます。また、ユーザーを見つけたときにループ内にbreakをコードする必要があります(ファイルの残りの部分を調べ続ける必要がないため)。

get_registration(username, password, 'pwd_filename')は、アカウントを作成し、ユーザーとパスワードファイルを開いて情報を追加するのに必要な情報を求めます。最後に書き込むことができるように、ファイルを開く方法については組み込み関数open()のドキュメントをチェックしてください。正常に登録されている場合はTrueを、登録しない場合はFalseを返します。 「あなたは登録しますか?」のような質問をすることができます。あなたが追加の質問すべてに戻ると登録したくないと思うかもしれません。

これは初心者のPythonプログラマーにとっては非常に難しい問題です。さまざまなコードとデータ構造を使い、プログラムをデバッグする方法を学び、Pythonのドキュメントを使う方法を学びます。

関連する問題