0

我有一个生成列表的程序,然后我让他们告诉我他们想从菜单中做什么,这就是我的问题开始的地方我能够让用户输入不同的功能但是当我尝试使用它不检查的 if else 条件,下面是我的代码

def menu(x,l):
    print (x)
    if x == 1:
        return make_table(l)
    if x == 2:
        y= input("enter a row (as a number) or a column (as an uppercase letter")
        if y in [ "1",'2','3']:
            print("Minmum is:",minimum(y,l))
    if x== 3:
        print ('bye')

def main():
    bad_filename = True
    l =[]
    while bad_filename == True:
        try:
            filename = input("Enter the filename: ")
            fp = open(filename, "r")
            for f_line in fp:
                f_str=f_line.strip()
                f_str=f_str.split(',')
                for unit_str in f_str:
                    unit=float(unit_str)
                    l.append(unit)
            bad_filename = False
        except IOError:
            print("Error: The file was not found: ", filename)
        #print(l)
    condition=True

    while condition==True:
        print('1- open\n','2- maximum')
        x=input("Enter the choice")
        menu(x,l)

main()

从底部函数我可以获取列表,我可以获取用户输入,我可以获取数据并将其移动到第二个函数中,但之后它将无法工作。谢谢

4

1 回答 1

1

我认为您的问题很简单,与您如何在函数之间传递值无关。

main中,您正在从用户那里读取一个值,如下所示:

x=input("Enter the choice")

input功能:

... 从输入中读取一行,将其转换为字符串(去除尾随的换行符),然后返回。

因此,如果用户1在提示符下键入,您将返回 string "1"

现在,您将该值(完全正确)传递给menu.

menu中,然后您尝试将其与各种数字进行比较,如下所示:

if x == 1:

但这永远不会是真的。字符串,如"1"永远不等于数字,如1。它们甚至不是同一种价值,更不用说相同的价值了。

因此,您需要做以下两件事之一:

  • 将输入转换为数字。例如,更改menu(x,l)menu(int(x), l). 或者……</li>
  • menu期望字符串。例如,更改if x == 1:if x == "1":.

您可能想知道为什么这print (x)不能帮助您调试问题。

print(x)打印出您提供的任何内容的最终用户友好的字符串表示形式。也就是说,它会自动str为您调用该函数。出于调试目的,您通常希望使用repr而不是str, 来获得程序员友好的字符串表示,而不是最终用户友好的字符串表示。

例如,print(str("10"))将打印出10— 就像 一样print(str(10)),因此您无法区分它们。但print(repr("10"))会打印出来'10',不像print(repr(10)),而打印10,所以你可以把它们区分开来。repr还可以帮助您发现其中包含不可见字符的字符串、来自解析器的特殊“节点”对象而不仅仅是字符串等。

于 2013-10-30T22:11:22.147 回答