Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成不在数组中的数字_Python_Algorithm_Numbers - Fatal编程技术网

Python 生成不在数组中的数字

Python 生成不在数组中的数字,python,algorithm,numbers,Python,Algorithm,Numbers,您好,我正在做以下编程练习:。声明如下: 在每个赛季开始时,足球队中的每个球员都是 分配了他们自己唯一的班号。由于迷信或他们的 历史上某些数字比其他数字更可取 编写一个函数generateNumber(),该函数接受两个参数,一个数组 当前球队人数(球队)和新球员的期望 编号(n)。如果新玩家所需的号码尚未获得, 返回n,否则,如果所需的数字可以通过加两个来形成 介于1和9之间的数字,返回将这两个数字相加形成的数字 数字放在一起。例如,如果取2,则返回11,因为1+1=2。 否则返回null 注

您好,我正在做以下编程练习:。声明如下:

在每个赛季开始时,足球队中的每个球员都是 分配了他们自己唯一的班号。由于迷信或他们的 历史上某些数字比其他数字更可取

编写一个函数generateNumber(),该函数接受两个参数,一个数组 当前球队人数(球队)和新球员的期望 编号(n)。如果新玩家所需的号码尚未获得, 返回n,否则,如果所需的数字可以通过加两个来形成 介于1和9之间的数字,返回将这两个数字相加形成的数字 数字放在一起。例如,如果取2,则返回11,因为1+1=2。 否则返回null

注:通常会有几种不同的方式形成替代品 号码。在这些情况下,第一位数字最低的数字应为 优先考虑。例如,如果n=15,但班上已经有15人,返回 69,不是78

我们想了解如何改进以下算法:

def generate_number(squad, n): #☘️
    print("squad: ",squad)
    print("n: ",n)
    if n not in squad: return n
    firstDigit = n%9
    secondDigit = 9
    squadNumber = int(str(firstDigit)+str(secondDigit))
    while squadNumber <= 99 and squadNumber in squad:
        print("squadNumber: ",squadNumber)
        firstDigit+=1
        secondDigit-=1
        while(firstDigit+secondDigit != n):
            print("inside squadNumber: ",squadNumber)
            firstDigit+=1
            secondDigit-=1
            squadNumber = int(str(firstDigit)+str(secondDigit))
        squadNumber = int(str(firstDigit)+str(secondDigit))
    return squadNumber if squadNumber <= 99 else None
然而,如果n是18岁,而他现在在阵容中,会发生什么呢。该算法应返回下一个最低值,即99

但我们的代码的跟踪是:

squad:  [1, 2, 3, 4, 6, 9, 10, 11, 15, 18, 23, 69]
n:  18
squadNumber:  9
inside squadNumber:  9
inside squadNumber:  27
inside squadNumber:  36
inside squadNumber:  45
inside squadNumber:  54
inside squadNumber:  63
inside squadNumber:  72
inside squadNumber:  81
inside squadNumber:  90

Traceback (most recent call last):
  File "main.py", line 23, in <module>
    Test.assert_equals(generate_number([1, 2, 3, 4, 6, 9, 10, 11, 15, 18, 23, 69], 18), 99)
  File "/home/codewarrior/solution.py", line 16, in generate_number
    squadNumber = int(str(firstDigit)+str(secondDigit))
ValueError: invalid literal for int() with base 10: '10-1'
我们认为直接方法是:从11循环到99,并返回数字和n之和的最低值:

def generate_number(squad, n):
    print("squad: ",squad)
    print("n: ",n)
    if n not in squad: return n
    for twoDigitsNumber in list(range(11,100)):
        if "0" in str(twoDigitsNumber): continue
        print("twoDigitsNumber: ",twoDigitsNumber)
        firstDigit=int(str(twoDigitsNumber)[0])
        secondDigit=int(str(twoDigitsNumber)[1])
        summed=firstDigit+secondDigit
        print("summed: ",summed)
        if twoDigitsNumber not in squad and summed==n: return twoDigitsNumber
    return None
我们读到:


    • 您的计算有误。查看您的跟踪:

      n:  18
      squadNumber:  9
      inside squadNumber:  9
      inside squadNumber:  27
      

      您无法找到
      99
      ,因为您已决定将所需的班号替换为其数字之和;这与规格相反。你应该搜索18的总和,而不是9。从代码中删除替换项,它应该可以正常工作。

      您的计算有问题。查看您的跟踪:

      n:  18
      squadNumber:  9
      inside squadNumber:  9
      inside squadNumber:  27
      
      您无法找到
      99
      ,因为您已决定将所需的班号替换为其数字之和;这与规格相反。你应该搜索18的总和,而不是9。从代码中删除替换项,它应该可以正常工作

      n:  18
      squadNumber:  9
      inside squadNumber:  9
      inside squadNumber:  27