追光THO 发表于 2023-7-21 22:32:53

第20讲,这代码前面录入字符串的时候应该有问题

第20讲,这代码前面录入字符串的时候应该有问题,我不知道怎么处理,求大佬指点一下。
https://fishc.com.cn/thread-167926-1-1.html
动动手第0题
s = input('请输入测试字符串:')
list1 = []
list1 = list1.extend(s)
i = 0
is_bool = True
num = len(s) - 1
if len(s)%2 == 0:
    pass
else:
    is_bool = False

for i in range(len(s)//2):
    if list1 == '(':
      pass
    elif list1 == ')':
      pass
    elif list1 == '[':
      pass
    elif list1 == ']':
      pass
    elif list1 == '{':
      pass
    elif list1 == '}':
      pass
    else:
      is_bool = False
      break
#第一个判断结束

for i in range(len(s)//2):
    for j in range( len(s)//2,len(s)):
      if list1(i) == list1(num):
            pass
      else:
            is_bool = False
            break   
      num -= 1      
else:
    is_bool = True
#第二、三个判断结束

if is_bool:
    print('非法T_T')
else:
    print('合法^o^')
      

Mike_python小 发表于 2023-7-21 22:33:05

问题分析:
根据您提供的代码,可能存在以下问题:
1. 在将输入的字符串转换为列表时,使用了list1.extend(s),但是extend()方法没有返回新的列表,所以后续对list1的操作会出现问题。
2. 在第一个判断结束之后的循环中,使用了list1(i)和list1(num)来访问列表元素,但是应该使用方括号[]来进行索引操作,即list1和list1。
3. 在第二、三个判断结束后的条件判断中,缺少冒号(:)。
4. 在第三个判断结束后的循环中,应该使用下标num -= 1来更新索引值。

优化后的代码:


s = input('请输入测试字符串:')
list1 = list(s)# 将输入的字符串转换为列表

is_bool = True
num = len(s) - 1

if len(s) % 2 == 0:
    pass
else:
    is_bool = False
   
for i in range(len(s)//2):
    if list1 == '(':
      pass
    elif list1 == ')':
      pass
    elif list1 == '[':
      pass
    elif list1 == ']':
      pass
    elif list1 == '{':
      pass
    elif list1 == '}':
      pass
    else:
      is_bool = False
      break# 第一个判断结束

for i in range(len(s)//2):
    for j in range(len(s)//2, len(s)):
      if list1 == list1:
            pass
      else:
            is_bool = False
            break
      num -= 1

else:
    is_bool = True# 第二、三个判断结束

if is_bool:
    print('非法T_T')
else:
    print('合法^o^')


希望以上修改能帮助您解决问题。如果还有其他疑问,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-7-21 22:33:23

根据您提供的代码,看起来您试图检查输入的字符串是否是一个有效的括号匹配序列。然而,代码有几个错误。下面是修改后的正确代码:

s = input('请输入测试字符串:')
list1 = list(s)
is_bool = True

# 有效的括号匹配应该是偶数长度
if len(list1) % 2 != 0:
    is_bool = False
else:
    # 建立一个字典来定义括号匹配关系
    match = {'(': ')', '[': ']', '{': '}'}
    # 使用栈来存储待匹配的左括号
    stack = []
    for ch in list1:
      # 如果ch是左括号,将其压入栈中
      if ch in match:
            stack.append(ch)
      # 如果ch是右括号,判断栈是否为空或者栈顶的左括号与ch是否匹配
      elif not stack or match != ch:
            is_bool = False
            break

if is_bool:
    print('合法^o^')
else:
    print('非法T_T')

这段代码的逻辑是这样的:遍历输入的字符串,如果字符是左括号,就将其压入栈中;如果字符是右括号,就检查栈顶的左括号是否与其匹配。如果不匹配,或者在检查时栈为空(这意味着没有对应的左括号),则字符串为非法。如果整个字符串遍历完成,都没有发现非法情况,就认为字符串是合法的。

这是一个标准的括号匹配问题的解决方案,用到了栈这一数据结构的特性(后进先出)。在实际编程中,括号匹配问题是非常常见的,例如编译器就需要检查源代码中的括号是否匹配。
页: [1]
查看完整版本: 第20讲,这代码前面录入字符串的时候应该有问题