2016-04-15 3 views
0

私はちょうど学校でのPythonの学習を始めました。私は自宅でそれを練習してきましたので、私はPythonには新しいです。 私は問題を持っているが、私は、print()または計算にそれらを入れるために私が{0}を使うとき、def two()からmain()に値を持ち越そうとしているということです、任意の値を持ちます。ここ別のdefの値をどのように持ち越しますか?

は私のコードです:

def two(): 
    print("Hello world!") 
    print("Please enter three numbers") 
    nam=int(input("Enter the first number: ")) 
    num=int(input("Enter the second number: ")) 
    nom=int(input("Enter the third number: ")) 
    print("So the numbers you have entered are {0}, {1},{2}.".format(nam,nom,num)) 

def main(): 
    main=two() 
    inpt=input("what math related problem would you like me to do with them? tell me here: ").capitalize() 
    if inpt== "Divide": 
    ans=({0}/{1}/{2})/1 
    print("{0}, there you go!") 
    elif inpt== "Times": 
    ans=(nam*num*nom)/1 
    print("{1}, there you go!") 

そしてHERESに私はそれを実行しているから何を得る:

>>> main() 
Hello world! 
Please enter three numbers 
Enter the first number: 30 
Enter the second number: 30 
Enter the third number: 30 
So the numbers you have entered are 30, 30, 30. 
what math related problem would you like me to do with them? tell me here: divide 
Traceback (most recent call last): 
File "<pyshell#4>", line 1, in <module> 
main() 
File "C:\Users\chemg\Documents\PracticePY.py", line 40, in main 
ans=({0}/{1}/{2})/1 
TypeError: unsupported operand type(s) for /: 'set' and 'set' 

答えて

1

あなたの前の関数から値を返した後、変数であるためにそれらを設定することができます。

あなたはまたmain = two()

nam, num, nom = two() 

を設定main()two()

return nam, num, nom 

の終わりに、あなたはすでに予約されている名前空間を使用して機能を無効にすることができmain名前を変更する必要があります。 1種の元素を含むセット - それは今、これらはシングルトンすなわち、あるあるとして

あなたはこれらの値

ans = nam/num/nom 

で割り算を行うことができます。

次に、あなたのprint文ここにあなたのコードで

+1

これは完璧に機能しました。しかし私は私のコードでは、プリントの最後に.formatを追加する必要があることに気づいた。それはすべて今うまく動作します。ありがとう! –

0

であなたの文字列に入力これらにformatを使用することができます。

ans=({0}/{1}/{2})/1 

{0}{1}{2}は1種の元素を含むセットです。あなたはセットを分割することはできません。それはエラーが何を不平にしているかです。

two()からmain()までの値を渡す必要があります。それがどのように行われるかについては、Slayerの答えを参照してください。

{0}トークンは、テキストの書式設定にformat()という文字列から読み取られるため、使用することはできません。文字列の外側では、ゼロを含むセットです。

0

ここで問題となるのは、メイン関数内の文字列以外の操作に文字列書式を適用しようとしていることです。

print("So the numbers you have entered are {0}, {1},{2}.".format(nam,nom,num)) 

あなたはその単一format関数呼び出し内の値に対してのみsubstittue上記の行で使用している中括弧。 ans=({0}/{1}/{2})/1に電話すると、実際には3つの別々のsetsが作成されます。それは別のPythonデータ型です。あなたのコードがしようとしているように、セットが分割されているわけではないので、そのエラーが発生しています。

スレイヤーの答えで述べたように、あなたの最善の策は、3つのすべての変数があなたの「2」機能を形成返すことです:

return nam, num, nom 

そのように、あなたはあなたのメインの関数内でそれらを他の変数を割り当てることができます。関数と同じ名前の変数を作成することをお勧めします。それはあなたのためにいくつかの非常に混乱する動作を作成します。

nam, num, nom = two() 

最後に、例外を実際に作成しているコード行を修正して動作させることができます。

ans = nam/num/nom 
関連する問題