首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我在使用两个函数进行编码时遇到了一些问题

我在使用两个函数进行编码时遇到了一些问题
EN

Stack Overflow用户
提问于 2020-06-02 23:23:22
回答 3查看 180关注 0票数 0

我正在尝试用python做一个货币计算器:

代码语言:javascript
运行
复制
print("Please choose which currency you want to convert:")
print("A - Korean Won to US Dollar (Exchange Rate: 0.000905)")
print("B - Korean Won to Euro (Exchange Rate: 0.000807350908)")
print("C - Korean Won to Japanese Yen (Exchange Rate: 0.0919061643)")
print("D - Korean Won to Chinese RMB (Exchange Rate: 0.00603703605)")
print("E - Quit ")

A=0
B=0
C=0
D=0

usd = 0.000905
eur = 0.000807350908
yen = 0.0919061643
rmb = 0.00603703605

def main():
    (option, amount) = Input()
    Output(totalamount)

def Input():
    option = eval(input("Enter your option: "))
    amount = eval(input("Enter the amoutn in Korean Won: "))
    if option == "A":
        totalamount = (amount * usd)
        print (amount +"Won equals to "+totalamount+" USD")
    elif option== "B":
        totalamount = (amount * eur)
        print (amount +"Won equals to "+totalamount+" Euro")
    elif option== "C":
        totalamount = (amount * yen)
        print (amount +"Won equals to "+totalamount+" Yen")
    elif option== "D":
        totalamount = (amount * rmb)
        print (amount +"Won equals to "+totalamount+" Chinese RMB")
    else:
        quit

main()

我还在学习如何使用python,但我想知道为什么每次运行程序时都会出现这个错误:

代码语言:javascript
运行
复制
TypeError: cannot unpack non-iterable NoneType object

我该怎么解决这个问题呢?

EN

回答 3

Stack Overflow用户

发布于 2020-06-02 23:25:46

您将不返回任何内容,并将输出None放入两个不同的变量中。这是不对的。在funciton add的末尾

代码语言:javascript
运行
复制
return option, amount
票数 2
EN

Stack Overflow用户

发布于 2020-06-03 18:43:21

代码语言:javascript
运行
复制
def main():
    (option, amount) = Input()
    Output(totalamount)

这里分配optionamount变量的值应该由input()函数提供,但是正如您可以看到的那样,您的输入函数是no,其中返回了一些值,因此默认情况下它返回None

您期望返回一些值。

以下是您的完整代码

代码语言:javascript
运行
复制
print("Please choose which currency you want to convert:")
print("A - Korean Won to US Dollar (Exchange Rate: 0.000905)")
print("B - Korean Won to Euro (Exchange Rate: 0.000807350908)")
print("C - Korean Won to Japanese Yen (Exchange Rate: 0.0919061643)")
print("D - Korean Won to Chinese RMB (Exchange Rate: 0.00603703605)")
print("E - Quit ")

A=0
B=0
C=0
D=0

usd = 0.000905
eur = 0.000807350908
yen = 0.0919061643
rmb = 0.00603703605
def main():
    (option, amount,totalamount) = Input()  #modified
    print(totalamount)  


def Input():
    option = input("Enter your option: ")
    amount = eval(input("Enter the amoutn in Korean Won: "))
    totalamount=0  #added here
    if option == "A":
        totalamount = (amount * usd)
        print (str(amount) +"Won equals to "+str(totalamount)+" USD")
    elif option== "B":
        totalamount = (amount * eur)
        print ("{} Won equals to {} Euro".format(amount,totalamount))
    elif option== "C":
        totalamount = (amount * yen)
        print ("{} Won equals to {} Yen".format(amount,totalamount))
    elif option== "D":
        totalamount = (amount * rmb)
        print ("{} Won equals to {} Chinese RMB".format(amount,totalamount))
    else:
        quit

    return option,amount,totalamount


main()
票数 2
EN

Stack Overflow用户

发布于 2020-06-20 08:19:36

这里有一些建议/和修复方法。还有更多的东西可以改进,但我想展示一些基本的东西,希望它们不会太复杂而难以理解,但可以让你的代码更好。

这个想法是编写代码,这是容易阅读和易于更改的。

代码语言:javascript
运行
复制
usd = 0.000905
eur = 0.000807350908
yen = 0.0919061643
rmb = 0.00603703605


def print_choices():
    """
    This is a doc string. Here you should describe what your function is doing.

    This function prints the choices, that a user can make
    """
    print("Please choose which currency you want to convert:")
    # DRY: (=Don't Repeat Yourself). you have the exchange rate already in
    # variables. so use them, so that if the exchange rate changes you 
    # need to change only one line in your code.
    print("A - Korean Won to US Dollar (Exchange Rate: %f)" % usd)
    print("B - Korean Won to Euro (Exchange Rate: %f)" % eur)
    print("C - Korean Won to Japanese Yen (Exchange Rate: %f)" % yen)
    print("D - Korean Won to Chinese RMB (Exchange Rate: %f)" % rmb)
    print("E - Quit")
    # describe what happens if you enter another value
    # lateron you might want to rewrite your code such, that it rejects 
    # any option, that is not A, B, C, D, E and asks for input until it is
    # correct.
    print("any other input will Quit ")

# variables A,B,C,D are not used in your code, so remove them

# function names should only use lowercase characters and '_' 
# This is a way of telling others, that this is a variable or a function
# It is got practice, that function names start with a verb and then an object.
def get_user_input():
    """ 
    This function prompts the user for an option and an amount in
    Korean Won and returns it to the caller.

    returns: options, amount
    """

    option = input("Enter your option: ")
    # convert option to uppercase, so even if the user enters 'a', 
    # option 'A' will be chosen
    option = option.upper()

    # eval should not be used it is a dangerous function. Use float instead
    amount = float(input("Enter the amount in Korean Won: "))
    return option, amount

def calculate_and_print_converted_amount(option, amount):
    """ 
    depending on option, amount is converted to another currency
    This function calculates and displays the converted amount
    and the currency. 
    If option "E" is selected Nothing is displayed.
    if an unknown option is selected a small warning will be displayed
    and no currency conversion is performed.
    """

    if option == "A":
        conversionrate = usd
        currency = "USD"
    elif option == "B":
        conversionrate = eur
        currency = "Euro"
    elif option== "C":
        conversionrate = yen
        currency = "Yen"
    elif option== "D":
        conversionrate = rmb
        currency = "Chinese RMB"
    elif option== "E":
        return
    else:
        # quit is no python command use return instead to return from
        # a function.
        # alternatively you can exit the entire python script 
        # with sys.exit()
        print("unknown option %s. Will quit" % option)
        return
    # Use only one print statement, so you can change formatting by changin
    # only one line
    totalamount = amount * conversionrate
    print ("%.2f Won equals to %.2f %s" % (amount, totalamount, currency))


def main():
    print_choices()
    (option, amount) = get_user_input()
    calculate_and_print_converted_amount(option, amount)
    # if you wanted to you could have one function (calculate_amount), 
    # that just calculates the amount and returns the amount and the 
    # currency and another function printing the answer.
    # you see that many programs separate 'calculation' from 'presentation'
    # one function does the work, the other one decides how to 'present' 
    # the information. (print to the terminal, write to a file, display 
    # with a GUI framework.
    # If you'd separate code like that you could re use the calculation if
    # you change your user interface and you just had to reimplement the
    # function presenting the result


main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62155412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档