通过函数传递变量/列表

时间:2016-01-27 23:09:39

标签: python python-3.x

我无法对变量/列表进行排序,然后能够跨函数传输它们。我仍然是python的新手,我可能错过了一些非常基本的东西。但是我已经过了好几个小时。

我需要创建一个生成20个随机整数的程序,并指出每个数字是奇数还是偶数。我需要将两个原始整数按升序排序并将它们转移到random.randint函数但是遇到麻烦,任何帮助都会受到赞赏。

这是我到目前为止所做的。

import random

def userinput():

    global number1
    global number2

   number1 = int(input("Enter First Integer: "))
   number2 = int(input("Enter Second Integer: "))

userinput()

def numbersorting():

  global both
  both = [(number1),(number2)]
  sorted(both)

numbersorting()

def random_gen():

    global num
    i = 0

    for i in range(20):
        num = random.randint(number1,number2)

    def get_num():
        return values.pop


    def odd_even():
        if num % 2 == 0:
            print("Random Number", num, "is even")
        else:
            print("Random Number", num, "is odd")
    odd_even()

random_gen()

5 个答案:

答案 0 :(得分:1)

在这个问题上看起来并不是那么清楚你实际上想要做什么,但一般来说,使用全局是一种非常糟糕的做法。

但是,您可以使用返回instace所需值的方法: 如果您需要返回2个数字的用户输入,最好使用此方法:

def get_numeric_input(label):
    try:
        return int(input(label))
    except NameError:
        print "Please enter a number"
        return get_numeric_input(label)

使用此功能,您可以从用户处获取数值。

使用它可以获得2个下一个值,例如

def get_user_input():
    n = get_numeric_input("Enter First Integer: ")
    m = get_numeric_input("Enter First Integer: ")
    return [n, m]

现在你有一个函数可以返回用户的2个值,并使用list的排序方法对这些值进行排序

def get_sorted_values(l):
    return l.sort()

检查有关在python https://jsfiddle.net/xczdcqx0/7/

中排序的信息

使用您所描述的随机数是可以的,但也尝试在任何其他函数之外使用is_odd和is_even函数,您将能够重复使用它们更多次。

答案 1 :(得分:0)

尝试both.sort()

sorted会返回一个新列表。

sort()已经完成。

答案 2 :(得分:0)

你在找这样的东西吗?

我编辑了您的代码以使用我理解您的问题...

您希望用户输入2个数字来设置每个随机数的上限和下限。那么你想在该范围内生成20个随机数,并找出每个偶数或奇数?

get_num()

您当前的代码存在一些问题:

  1. 缩进(在编辑中修复)
  2. 不必要地使用全局变量。如果您需要这种类型的功能,您应该考虑将变量传递到每个函数中,而不是
  3. 许多功能也是不必要的。例如,您不需要odd_even()random_gen()函数,因为您可以在循环中执行这些操作。即使在我发布的情况下你甚至不需要static int computeMaxPath(int[] a, int self, int row) { if (self >= a.length) return 0; else return a[self] + Math.max( computeMaxPath(a, self + row + 1, row + 1), computeMaxPath(a, self + row + 2, row + 1)); } static int computeMaxPath(int[] a) { return computeMaxPath(a, 0, 0); } 函数 - 你可以在用户输入之后将所有代码移动到。我只是把它留在那里,以显示我的意思,上面的第2点

答案 3 :(得分:0)

from random import randint


def user_input():
    number1 = int(input("Enter First Integer: "))
    number2 = int(input("Enter Second Integer: "))

    if number1 > number2:
        number1, number2 = number2, number1

    return number1, number2


def odd_even(num):
    if num % 2 == 0:
        print("Random Number " + str(num) + " is even")
    else:
        print("Random Number " + str(num) + " is odd")


def random_gen():
    number1, number2 = user_input()
    for i in range(20):
        num = randint(number1, number2)
        odd_even(num)

random_gen()

您通常希望尽可能避免使用全局变量。这只是一个很好的编程实践,因为如果你不仔细跟踪它们,它们会变得相当混乱并导致问题。至于排序你的两个整数,我认为if if语句是一种更加pythonic的做事方式。嗯,我认为至少更容易。此外,在Python中,您不需要声明for循环变量,因此行i=0是不必要的。此外,我确信这是一项任务,但在现实生活中你会想要运行一个例外条款,你可以在其中说出像

这样的内容。
while True:
    try:
        number1 = int(input("Enter First Integer: "))
        number2 = int(input("Enter Second Integer: "))
        break
    except ValueError:
        print("Oops! Try entering an integer!")

希望有所帮助!

答案 4 :(得分:0)

通过将变量传递给函数并从函数返回新值来避免全局变量。

import random


def userinput():

    number1 = int(input("Enter First Integer: "))
    number2 = int(input("Enter Second Integer: "))
    return number1, number2


def numbersorting(nums):

    return sorted(nums)


def random_gen(hi, lo):

    return random.sample(range(hi, lo), 20)


def odd_even(num):
    if num % 2 == 0:
        print("Random Number %d is even" % num)
    else:
        print("Random Number %d is odd" % num)


nums = userinput()
sortnum = numbersorting(nums)
randoms = random_gen(*sortnum)
[odd_even(n) for n in randoms]

与原始功能名称保持一致。

您应该了解list.sortsorted之间的区别。如果您有一个列表li,那么li.sort()就地排序,即它会改变原始列表并返回None。所以return li.sort()总是错的。另一方面,return sorted(li)没问题,但只是sorted(li)是一种浪费的排序,因为结果被抛弃了。