Core Python Programmingという本を読んでいます。演習 2_11 は、以前の単純なプログラムを実行するオプションをユーザーが選択できるようにするメニュー システムを構築するように指示しました。メニュー システムは、ユーザーが終了するオプションを選択するまで開いたままになります。これが私の最初の作業プログラムです。
programList = {1:"menu system",
2:"for loop count 0 to 10",
3:"positive or negative",
4:"print a string, one character at a time",
5:"sum of a fixed tuple",
"x":"quit()",
"menu":"refresh the menu"}
import os
for x in programList:
print(x,":",programList[x])
while True:
selection = input("select a program: ")
if selection == "1":
os.startfile("cpp2_11.py")
elif selection == "2":
os.startfile("cpp2_5b.py")
elif selection == "3":
os.startfile("cpp2_6.py")
elif selection == "4":
os.startfile("cpp2_7.py")
elif selection == "5":
os.startfile("cpp2_8.py")
elif selection == "menu":
for x in range(8): print(" ")
for x in programList:print(x,":",programList[x])
elif selection == "X":
break
elif selection == "x":
break
else:
print("not sure what you want")
input()
quit()
このバージョンは問題なく動作しましたが、辞書を case/switch ステートメントとして使用して、醜い if/elif/else 行をクリーンアップしたかったのです。
今、私は立ち往生しています。PyDev で Eclipse を使用していますが、新しいコードでエラーがスローされます。
重複した署名:!!
これが私の現在のコードのコピーです:
import os
def '1'():
os.startfile("cpp2_11.py")
def '2'():
os.startfile("cpp2_5b.py")
def '3'():
os.startfile("cpp2_6.py")
def '4'():
os.startfile("cpp2_7.py")
def '5'():
os.startfile("cpp2_8.py")
def 'm'():
for x in range(8): print(" ")
for x in actions:print(x,":",actions[x])
def 'x'():
quit()
def errhandler():
else:
print("not sure what you want")
actions = {1:"menu system",
2:"for loop count 0 to 10",
3:"positive or negative",
4:"print a string, one character at a time",
5:"sum of a fixed tuple",
"X":"quit()",
"menu":"refresh the menu"}
for x in actions:
print(x,":",actions[x])
selectedaction = input("please select an option from the list")
while True:
actions.get(selectedaction,errhandler)()
input()
quit()
現在の問題 (エラー コード) は、関数で os.startfile() を使用しようとしている方法に関連していると確信しています。多分私は道を外れています。どんな助けでも大歓迎です。
編集: 今後の参照に役立つように、タイトルを変更しています。関数の命名における単純なエラーを指摘する Ryan からの有益なコメントの後、機能するスクリプトをまとめることができました。一種の...ここにあります:
import os
def menu_system():
os.startfile("cpp2_11alt.py")
def loopCount_zero_to_ten():
os.startfile("cpp2_5b.py")
def positive_or_negative():
os.startfile("cpp2_6.py")
def print_a_string_one_character_at_a_time():
os.startfile("cpp2_7.py")
def sum_of_a_tuples_values():
os.startfile("cpp2_8.py")
def refresh_the_menu():
for x in range(4): print(" ")
for y in actions:print(y,":",actions[y])
for z in range(2): print(" ")
def exit_the_program():
quit()
def errhandler():
print("not sure what you want")
actions = {'1':menu_system,
'2':loopCount_zero_to_ten,
'3':positive_or_negative,
'4':print_a_string_one_character_at_a_time,
'5':sum_of_a_tuples_values,
'x':exit_the_program,
'm':refresh_the_menu}
for item in actions:
print(item,":",actions[item])
for z in range(2): print(" ")
selectedaction = input("please select an option from the list: ")
while True:
actions.get(selectedaction,errhandler)()
selectedaction = input("please select an option from the list: ")
quit()
2回目の試みには多くの問題がありました。関数を呼び出すときに、値ではなく辞書のキーを参照していました。また、メニューが入力値を出力して処理する方法にもいくつかのバグがありました。あとは、辞書の値を余分な情報なしで印刷する方法を見つけ出すだけです。これは、メニューを印刷したときの出力です。
2 : <function loopCount_zero_to_ten at 0x027FDA08>
3 : <function positive_or_negative at 0x027FD810>
1 : <function menu_system at 0x027FD978>
4 : <function print_a_string_one_character_at_a_time at 0x027FD930>
5 : <function sum_of_a_tuples_values at 0x027FD780>
x : <function exit_the_program at 0x027FD858>
m : <function refresh_the_menu at 0x027FD7C8>
そして、メニューを番号順に印刷する方法。
繰り返しますが、どんな助けでも大歓迎です。