0

私はPythonにかなり慣れていませんが、現在、Pythonプログラム内で関数と複数のモジュールを操作することを学んでいます.

「Functions_Practice_Main」(メニューを実行する) と「Functions_Practice」の 2 つのモジュールがあります。これには、ユーザーの入力が 7 で除算されるかどうかに関係なく機能する単純なプログラムのコードが含まれます (私は知っています...かなり退屈な練習です)。

私がやりたいことは、メニューモジュールの実行時にユーザーに名前を入力させ、プログラム全体に表示してこのグローバル変数を取得して、プログラムをより個人的なものにすることです。

ただし、メニュー モジュールを実行すると、名前を 2 回要求されます。最初に入力した名前は「divide by 7」プログラムに表示され、2 番目に入力した名前はメニューに表示されます。なぜこれが起こっているのか理解しています (Functions_Practice モジュールのインポートにより、コードの残りの部分が実行される前に、Functions_Practice_Main モジュール内のグローバル変数が何であるかを知る必要があるため)、しかし、これを修正する方法を本当に知る必要があります。

メニューモジュールの実行時にユーザーに自分の名前を1回入力させ、プログラム全体に表示してこのグローバル変数を取得して、ユーザーにとってより個人的なものにするにはどうすればよいですか。

Functions_Practice_Main

import Functions_Practice, sys


name = input("What is your name? ")

def main():

while True:

  print(name, "'s Menu")
  print("*******************")
  print("1. Can you divide by 7?")
  print("2. Quit")
  print("*******************")
  selection = int(input("Your number selection please..."))

  if selection == 1:
    Functions_Practice.main()
  elif selection == 2:
    sys.exit()
  else:
    print("Your number selection was invalid, please try again...")


 if __name__ == '__main__':
    main()

*関数_練習*

import Functions_Practice_Main

def inputData(name):
    print(name)
    number = int(input(" Please enter your number: "))
    return number

def processData(number):
    answer = number % 7
    if answer == 0:
        remainder = True
    else:
        remainder = False
    return remainder

def outputData(remainder):
    if remainder == True:
        print("The number you entered doesn't have a remainder")
    elif remainder == False:
        print("The number you entered does have a remainder")



def main():
    number = inputData(Functions_Practice_Main.name)
    remainder = processData(number)
    outputData(remainder)


if __name__ == '__main__':
    main()
4

1 に答える 1

0

モジュールをスクリプトとして実行しても、モジュールとしてインポートしたとは見なされません。Functions_Practice_Main.py スクリプトが Functions_Practice をインポートし、Functions_Practice が Functions_Practice_Main をインポートする場合、Python は Functions_Practice_Main.py 内のコードが既にメイン スクリプトとして実行されていることを気にしません。Python はそれを再度実行して、モジュールを生成します。

これをどのように修正しますか?さて、やるべきことがいくつかあります。まず、可能な限り循環インポートを避けてください。Functions_Practice が Functions_Practice_Main をインポートする代わりに、Functions_Practice が必要とするデータを Functions_Practice_Main から関数の引数として渡します。

Functions_Practice_Main:

Functions_Practice.interactive_remainder_test(name)

Functions_Practice:

def interactive_remainder_test(name):
    number = inputData(name)
    remainder = processData(number)
    outputData(remainder)

第二に、このようなもの:

name = input("What is your name? ")

mainファイルがインポートされたときに実行されるべきではないため、ファイルの に属します。

于 2013-08-15T17:57:10.117 に答える