davidmou 发表于 2023-8-20 21:37:28

小小智商题

#在字符串中寻找斐波那契数列,若有一数字不满足此条件,则跳过这一数字,此数字不输出(用正则表达式求解)
斐波那契数列为
目标字符串为"21123hsdas34211235111111",则输出结果是"1123112351111"
目标字符串为"111" ,则输出结果是"11"
有哪位勇士能解出这道题,悬赏悬赏



VPython999 发表于 2023-8-20 21:37:29

在上面回答基础上改了下

import re

def generate_fibonacci(n):
    fibonacci =
    while len(fibonacci) < n:
      fibonacci.append(fibonacci[-1] + fibonacci[-2])
    return fibonacci

def find_fibonacci_numbers(s):
    fibonacci_numbers = generate_fibonacci(len(s))
    pattern ='('+'('.join(map(str, fibonacci_numbers))+')?'*(len(s)-1)+')\d?'
    result = for each in re.findall(pattern, s)]
    return ''.join(result)

# 示例1
target_string1 = "21123hsdas34211235111111"
output1 = find_fibonacci_numbers(target_string1)
print(output1) #输出值为1123112351111

# 示例2
target_string2 = "111"
output2 = find_fibonacci_numbers(target_string2)
print(output2) #输出值为11

isdkz 发表于 2023-8-20 21:37:49

import re

def find_fibonacci_numbers(string):
    pattern = r"(?=(\d{1,2}))(?=(\d{1,2}))"
    matches = re.findall(pattern, string)
    result = ""
    for match in matches:
      if int(match) + int(match) == int(match):
            result += match + match
    return result

target_string = "21123hsdas34211235111111"
output = find_fibonacci_numbers(target_string)
print(output)# 输出结果是"1123112351111"

target_string = "111"
output = find_fibonacci_numbers(target_string)
print(output)# 输出结果是"11"

陶远航 发表于 2023-8-20 21:38:16

非常感谢您提供的智商题!以下是使用正则表达式在字符串中寻找满足斐波那契数列条件的数字的示例代码:

import re

def generate_fibonacci(n):
    fibonacci =
    while len(fibonacci) < n:
      fibonacci.append(fibonacci[-1] + fibonacci[-2])
    return fibonacci

def find_fibonacci_numbers(s):
    fibonacci_numbers = generate_fibonacci(len(s))
    pattern = '|'.join(map(str, fibonacci_numbers))
    result = re.findall(pattern, s)
    return ''.join(result)

# 示例1
target_string1 = "21123hsdas34211235111111"
output1 = find_fibonacci_numbers(target_string1)
print(output1)# 输出:1123112351111

# 示例2
target_string2 = "111"
output2 = find_fibonacci_numbers(target_string2)
print(output2)# 输出:11


在上面的代码中,我们首先定义了一个generate_fibonacci()函数来生成斐波那契数列。然后,在find_fibonacci_numbers()函数中,我们根据目标字符串的长度生成相应长度的斐波那契数列,并将其转换为正则表达式的模式。最后,我们使用re.findall()函数找到目标字符串中满足斐波那契数列条件的数字,并将其连接成一个结果字符串。

希望以上代码能够满足您的需求!如果还有任何问题,请随时提问。
如果问题已经解决,请设置最佳答案

METALARISING 发表于 2023-8-21 12:55:08

有一个1不满足此条件

icheong 发表于 2023-8-21 17:14:03

用了个复杂的方法,不过勉强能用
def fib():
    a,b=0,1
    while True:
      yield a
      a,b=b,a+b



list1 = []
for i in fib():
    list1.append(i)
    if len(list1)==100:
      break
w='01235wer0112365601'
def check(string):
    list_inner=[]
    for i instring:
      try:
            list_inner.append(int(i))
      except:
            pass
    return list_inner
number=0
n=0
w=check(w)
list_finally=[]
while True:
    if w==list1:
      list_finally.append(w)
      number+=1
      n+=1
    else:
      number+=1
      n=0
    if number==len(w):
      break
print(list_finally)

icheong 发表于 2023-8-21 17:15:39

好吧 不是正则表达式 {:10_266:}

VPython999 发表于 2023-8-28 09:41:04

VPython999 发表于 2023-8-21 13:51
在上面回答基础上改了下

这运行显示结果是没错的,是不是有更简单的解决方法啊
页: [1]
查看完整版本: 小小智商题