beginner11
@beginner11

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonで疑似的な関数電卓を作りたい。でも問題点が……。

解決したい事項について

関数電卓的なものをPythonで作っているのですが、どうしても円の面積を求め終えてからの計算に不具合が出てしまいます。円の面積を求め終えてから、通常の計算をすると、2つ目の数値入力欄がスタックされてもう一つ余計に出てしまいます。また、連続で円の計算をしたらその分2つ目の数値入力欄がどんどん出てきてしまいます。この余分な入力欄はどうやって消せばいいでしょうか。delを使っても消せませんでした。

現在発生している不具合(コンソールより)

1つ目:数値入力>>5
記号(円ならpiと入力)>>pi
306.02
1つ目:数値入力>>3
記号(円ならpiと入力)>>*
2つ目:数値入力>>3
2つ目:数値入力>>4
12

作成したソースコード

import math

def title():
    print("------------")
    print("|Calcurator|")
    print("------------")

def begin():
    global first_num
    global second_num
    global calc
    first_num=int(input('1つ目:数値入力>>'))
    calc=str(input('記号(円ならpiと入力)>>'))
    select()
    if calc=='+' or calc=='-' or calc=='*' or calc=='/' or calc=='//' or calc=='**' or calc=='%':
        second_num=int(input('2つ目:数値入力>>'))
    elif calc=='pi':
        (second_num)=None

def select():
    if calc=='pi':
        circle()
        return begin()

def sum():
    print(first_num+second_num)

def minus():
    print(first_num-second_num)

def inc():
    print(first_num*second_num)

def div():
    print(first_num/second_num)

def div2():
    print(first_num//second_num)

def joe():
    print(first_num**second_num)

def extra():
    print(first_num%second_num)

def circle():
    print(round(math.pi**first_num,2))

title()
while(1):
    begin()
    if calc=='+':
        sum()
    elif calc=='-':
        minus()
    elif calc=='*':
        inc()
    elif calc=='/':
        div()
    elif calc=='//':
        div2()
    elif calc=='**':
        joe()
    elif calc=='%':
        extra()
    else:
        begin()
        
        

調べてみたこと

delを使うと変数を初期化できると聞いていたのですが、出来なくて困っています。

0

2Answer

再帰呼び出しをやめたらいいですよ。

import math

def title():
    print("------------")
    print("|Calcurator|")
    print("------------")

def begin():
    global first_num
    global second_num
    global calc
    first_num = int(input('1つ目:数値入力>>'))
    calc = input('演算子(円ならpiと入力)>>')
    if calc == 'pi':
        second_num = None
    else:
        second_num = int(input('2つ目:数値入力>>'))

def sum():
    print(first_num + second_num)

def minus():
    print(first_num - second_num)

def inc():
    print(first_num * second_num)

def div():
    print(first_num / second_num)

def div2():
    print(first_num // second_num)

def joe():
    print(first_num ** second_num)

def extra():
    print(first_num % second_num)

def circle():
    print(round(math.pi ** first_num, 2))

title()
while True:
    begin()
    if calc == '+':
        sum()
    elif calc == '-':
        minus()
    elif calc == '*':
        inc()
    elif calc == '/':
        div()
    elif calc == '//':
        div2()
    elif calc == '**':
        joe()
    elif calc == '%':
        extra()
    elif calc == 'pi':
        circle()
0Like

そういうことでしたか!
select()を関数にして、再帰呼び出しするのが余計でしたか。時間を割いてまでアドバイスをありがとうございます。お手数おかけして申し訳ありません。

0Like

Your answer might help someone💌