从一个函数获取列表和输入并在不同的函数中运行它们

时间:2013-10-30 21:50:47

标签: python

我有一个生成列表的程序然后我要求他们告诉我他们想要从菜单中做什么,这是我的问题开始我能够从用户获得输入到不同的功能,但当我尝试使用它不检查的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()

从底部功能我可以得到列表,我可以得到用户输入,我可以获取数据并将其移动到第二个功能,但它之后不会工作。谢谢你

1 个答案:

答案 0 :(得分:1)

我认为你的问题很简单,与你在函数之间传递值的方式无关。

main中,您正在读取用户的值,如下所示:

x=input("Enter the choice")

input功能:

  

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

因此,如果用户在提示符下键入1,则会返回字符串"1"

现在,您将该值完全正确地传递给menu

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

if x == 1:

但这永远不会成真。与"1"类似的字符串永远等于数字,例如1。它们甚至不是相同的值,更不是相同的价值。

所以,你需要做两件事之一:

  • 将输入转换为数字。例如,将menu(x,l)更改为menu(int(x), l)。 OR ...
  • 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还可以帮助您发现字符串中包含不可见字符的内容,包含来自解析器的特殊“节点”对象,而不仅仅是字符串等。