プロトコル名をキーとして含み、それらのプロトコルのテキスト記述を値として含む、DB と呼ばれる辞書を中心とするプログラムを作成します。グローバル変数はありません。
• mainには、ユーザーに「プロトコル」を入力するように問い合わせるループがあります</p>
• TF を呼び出して、プロトコル (キー) が DB に存在するかどうかを確認します。TF は T または F を返します。
• T の場合、main は値を出力して続行する PT を呼び出します。
• F の場合、main は ADD を呼び出します。ADD は値の入力を求め、KV ペアを DB に追加します。
ユーザーが「end」を入力するまでループし、DB を出力します
これは私がこれまでに持っているものです:
#!/usr/bin/python3
#contains protocol names as keys, and text descriptions of protocols as values
DB= {'ICMP': 'internet control message protocol', 'RIP':'RIP Description',
'ipv4':'Internet protocol v4', 'ipv6':'IP version 6'}
def TF(x):
return x in DB
def PT(x):
print("The protocol you entered is: " , x)
return x
def ADD(x):
usr_input = input("Please enter a value to be added to the DB: ")
description = input("Please enter description for the key: ")
DB[usr_input] = description
for i in DB:
user_input = input("Please enter the protocol: ")
if (user_input == "end"):
break
TF(user_input)
if (TF(user_input) == True):
PT(user_input)
else:
ADD(user_input)
ユーザー入力のプロンプトが表示されますが、プロンプトで「ICMP」と入力するなどの操作を行うと、同じ回答が出力され、Control + D を押すまで無限にループし続けます。ここで何が間違っていますか?辞書にないキーを入力しても同じです。助けてください。ありがとう。
編集: 無限ループの問題を修正し、PT(x) が呼び出されていることを示すように編集しました。また、DB にキー値が存在しない場合に ADD(x) が呼び出されるように問題が修正されました。
永続的な問題: たとえば、入力として「ICMP」を入力しても、キー自体のみが返され、キーに関連付けられた値は返されませんか? 値を表示するにはどうすればよいですか?
次に、ユーザー入力がまだ存在しない場合に ADD(x) が呼び出されるようになりましたが、DB 辞書に追加して出力することはありません。代わりに、次のようになります。
Please enter the protocol: ICMP
The protocol you entered is: ICMP
Please enter the protocol: icmp
Please enter a value to be added to the DB: here here
Please enter description for the key: herererere
Traceback (most recent call last):
File "D:/Sheridan/Part Time/Linux Architecture w. Network Scripting/Week 8 Code/practise_in_class.py", line 24, in <module>
for i in DB:
RuntimeError: dictionary changed size during iteration