Python 生成不在数组中的数字
您好,我正在做以下编程练习:。声明如下: 在每个赛季开始时,足球队中的每个球员都是 分配了他们自己唯一的班号。由于迷信或他们的 历史上某些数字比其他数字更可取 编写一个函数generateNumber(),该函数接受两个参数,一个数组 当前球队人数(球队)和新球员的期望 编号(n)。如果新玩家所需的号码尚未获得, 返回n,否则,如果所需的数字可以通过加两个来形成 介于1和9之间的数字,返回将这两个数字相加形成的数字 数字放在一起。例如,如果取2,则返回11,因为1+1=2。 否则返回null 注:通常会有几种不同的方式形成替代品 号码。在这些情况下,第一位数字最低的数字应为 优先考虑。例如,如果n=15,但班上已经有15人,返回 69,不是78 我们想了解如何改进以下算法:Python 生成不在数组中的数字,python,algorithm,numbers,Python,Algorithm,Numbers,您好,我正在做以下编程练习:。声明如下: 在每个赛季开始时,足球队中的每个球员都是 分配了他们自己唯一的班号。由于迷信或他们的 历史上某些数字比其他数字更可取 编写一个函数generateNumber(),该函数接受两个参数,一个数组 当前球队人数(球队)和新球员的期望 编号(n)。如果新玩家所需的号码尚未获得, 返回n,否则,如果所需的数字可以通过加两个来形成 介于1和9之间的数字,返回将这两个数字相加形成的数字 数字放在一起。例如,如果取2,则返回11,因为1+1=2。 否则返回null 注
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