Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Return original if all lines are blank min_indent = float('inf') for line in non_empty_lines: indent = 0 for char in line: if char.isspace(): indent += 1 else: break min_indent = min(min_indent, indent) dedented_lines = [] for line in lines: if line.strip(): # Only dedent non-empty lines dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines as they are return "\n".join(dedented_lines) # Example usage: code = """ def my_function(): print("Hello") if True: print("World") """ dedented_code = dedent(code) print(dedented_code) code2 = """ line1 line2 line4 """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ dedented_code3 = dedent(code3) print(dedented_code3) code4 = " no_newline" dedented_code4 = dedent(code4) print(dedented_code4) |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Return original if all lines are blank min_indent = float('inf') for line in non_empty_lines: indent = 0 for char in line: if char.isspace(): indent += 1 else: break min_indent = min(min_indent, indent) dedented_lines = [] for line in lines: if line.strip(): # Only dedent non-empty lines dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines as they are return "\n".join(dedented_lines) # Example usage: code = """ def my_function(): print("Hello") if True: print("World") """ dedented_code = dedent(code) print(dedented_code) code2 = """ line1 line2 line4 """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ dedented_code3 = dedent(code3) print(dedented_code3) code4 = " no_newline" dedented_code4 = dedent(code4) print(dedented_code4) |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Return original if all lines are blank min_indent = float('inf') for line in non_empty_lines: indent = 0 for char in line: if char.isspace(): indent += 1 else: break min_indent = min(min_indent, indent) dedented_lines = [] for line in lines: if line.strip(): # Only dedent non-empty lines dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines as they are return "\n".join(dedented_lines) # Example usage: code = """ def my_function(): print("Hello") if True: print("World") """ dedented_code = dedent(code) print(dedented_code) code2 = """ line1 line2 line4 """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ dedented_code3 = dedent(code3) print(dedented_code3) code4 = " no_newline" dedented_code4 = dedent(code4) print(dedented_code4) answer = dedent(''' print("hello") print("world") if True: print("true") else: print("false")''') expected = """print("hello") print("world") if True: print("true") else: print("false")""" assert answer == expected, f'Wrong answer; got {answer} instead of {expected}' print('All tests passed') |
def my_function():
print("Hello")
if True:
print("World")
line1
line2
line4
no_newline
All tests passed
Testing if the previous output contains the string All tests passed
: True
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import re def dedent(str): """ De-indents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-indented string. """ lines = str.splitlines() non_blank_lines = [line for line in lines if line.strip()] if not non_blank_lines: return "\n".join(lines) # Preserve original blank lines if the input is all blank min_indent = float('inf') for line in non_blank_lines: indent_match = re.match(r"^(\s*)", line) if indent_match: indent = len(indent_match.group(1)) min_indent = min(min_indent, indent) dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines as they were return "\n".join(dedented_lines) # Example usage code = """ def my_function(): print("Hello") print("Indented more") print("Outside") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): print("Hello") print("Outside") """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ # All blank lines dedented_code3 = dedent(code3) print(dedented_code3) code4 = " hello\n world\n" dedented_code4 = dedent(code4) print(dedented_code4) code5 = "hello\nworld\n" # No indentation to remove dedented_code5 = dedent(code5) print(dedented_code5) |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | import re def dedent(str): """ De-indents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-indented string. """ lines = str.splitlines() non_blank_lines = [line for line in lines if line.strip()] if not non_blank_lines: return "\n".join(lines) # Preserve original blank lines if the input is all blank min_indent = float('inf') for line in non_blank_lines: indent_match = re.match(r"^(\s*)", line) if indent_match: indent = len(indent_match.group(1)) min_indent = min(min_indent, indent) dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines as they were return "\n".join(dedented_lines) # Example usage code = """ def my_function(): print("Hello") print("Indented more") print("Outside") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): print("Hello") print("Outside") """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ # All blank lines dedented_code3 = dedent(code3) print(dedented_code3) code4 = " hello\n world\n" dedented_code4 = dedent(code4) print(dedented_code4) code5 = "hello\nworld\n" # No indentation to remove dedented_code5 = dedent(code5) print(dedented_code5) |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | import re def dedent(str): """ De-indents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-indented string. """ lines = str.splitlines() non_blank_lines = [line for line in lines if line.strip()] if not non_blank_lines: return "\n".join(lines) # Preserve original blank lines if the input is all blank min_indent = float('inf') for line in non_blank_lines: indent_match = re.match(r"^(\s*)", line) if indent_match: indent = len(indent_match.group(1)) min_indent = min(min_indent, indent) dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines as they were return "\n".join(dedented_lines) # Example usage code = """ def my_function(): print("Hello") print("Indented more") print("Outside") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): print("Hello") print("Outside") """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ # All blank lines dedented_code3 = dedent(code3) print(dedented_code3) code4 = " hello\n world\n" dedented_code4 = dedent(code4) print(dedented_code4) code5 = "hello\nworld\n" # No indentation to remove dedented_code5 = dedent(code5) print(dedented_code5) answer = dedent(''' print("hello") print("world") if True: print("true") else: print("false")''') expected = """print("hello") print("world") if True: print("true") else: print("false")""" assert answer == expected, f'Wrong answer; got {answer} instead of {expected}' print('All tests passed') |
1 2 3 4 5 6 7 8 9 10 11 12 | def my_function(): print("Hello") print("Indented more")</p> <p>print("Outside") def my_function(): print("Hello") print("Outside") hello world hello world All tests passed |
Testing if the previous output contains the string All tests passed
: True
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The input string. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Preserve original blank lines if input is all blank # Find the minimum indentation level among non-empty lines min_indent = float('inf') for line in non_empty_lines: stripped_line = line.lstrip() if stripped_line: # Ignore lines that become empty after stripping indent = len(line) - len(stripped_line) min_indent = min(min_indent, indent) # Dedent all lines by the minimum indentation level dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Keep blank lines as they are return "\n".join(dedented_lines) # Example usage code = """ def my_function(): print("Hello") if True: print("World") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): print("Hello") """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ dedented_code3 = dedent(code3) print(dedented_code3) |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The input string. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Preserve original blank lines if input is all blank # Find the minimum indentation level among non-empty lines min_indent = float('inf') for line in non_empty_lines: stripped_line = line.lstrip() if stripped_line: # Ignore lines that become empty after stripping indent = len(line) - len(stripped_line) min_indent = min(min_indent, indent) # Dedent all lines by the minimum indentation level dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Keep blank lines as they are return "\n".join(dedented_lines) # Example usage code = """ def my_function(): print("Hello") if True: print("World") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): print("Hello") """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ dedented_code3 = dedent(code3) print(dedented_code3) |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The input string. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Preserve original blank lines if input is all blank # Find the minimum indentation level among non-empty lines min_indent = float('inf') for line in non_empty_lines: stripped_line = line.lstrip() if stripped_line: # Ignore lines that become empty after stripping indent = len(line) - len(stripped_line) min_indent = min(min_indent, indent) # Dedent all lines by the minimum indentation level dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Keep blank lines as they are return "\n".join(dedented_lines) # Example usage code = """ def my_function(): print("Hello") if True: print("World") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): print("Hello") """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ dedented_code3 = dedent(code3) print(dedented_code3) answer = dedent(''' print("hello") print("world") if True: print("true") else: print("false")''') expected = """print("hello") print("world") if True: print("true") else: print("false")""" assert answer == expected, f'Wrong answer; got {answer} instead of {expected}' print('All tests passed') |
def my_function():
print("Hello")
if True:
print("World")
def my_function():
print("Hello")
All tests passed
Testing if the previous output contains the string All tests passed
: True
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-dented string. """ # Split the string into lines lines = str.splitlines() # Remove entirely blank lines for dedent calculation non_blank_lines = [line for line in lines if line.strip()] if not non_blank_lines: # Handle the case where all lines are blank return "\n".join(lines) # Preserve original blank lines # Calculate the common indent indent = min(len(line) - len(line.lstrip()) for line in non_blank_lines) # De-dent each line, preserving original blank lines dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[indent:]) else: dedented_lines.append(line) return "\n".join(dedented_lines) # Example usage: code = """ def my_function(): print("Hello") if True: print("World") print("Done") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): pass """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ # All blank lines dedented_code3 = dedent(code3) print(dedented_code3) code4 = " hello\n world\n" dedented_code4 = dedent(code4) print(dedented_code4) code5 = "hello\nworld\n" dedented_code5 = dedent(code5) print(dedented_code5) |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-dented string. """ # Split the string into lines lines = str.splitlines() # Remove entirely blank lines for dedent calculation non_blank_lines = [line for line in lines if line.strip()] if not non_blank_lines: # Handle the case where all lines are blank return "\n".join(lines) # Preserve original blank lines # Calculate the common indent indent = min(len(line) - len(line.lstrip()) for line in non_blank_lines) # De-dent each line, preserving original blank lines dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[indent:]) else: dedented_lines.append(line) return "\n".join(dedented_lines) # Example usage: code = """ def my_function(): print("Hello") if True: print("World") print("Done") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): pass """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ # All blank lines dedented_code3 = dedent(code3) print(dedented_code3) code4 = " hello\n world\n" dedented_code4 = dedent(code4) print(dedented_code4) code5 = "hello\nworld\n" dedented_code5 = dedent(code5) print(dedented_code5) |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The string of Python code. Returns: The de-dented string. """ # Split the string into lines lines = str.splitlines() # Remove entirely blank lines for dedent calculation non_blank_lines = [line for line in lines if line.strip()] if not non_blank_lines: # Handle the case where all lines are blank return "\n".join(lines) # Preserve original blank lines # Calculate the common indent indent = min(len(line) - len(line.lstrip()) for line in non_blank_lines) # De-dent each line, preserving original blank lines dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[indent:]) else: dedented_lines.append(line) return "\n".join(dedented_lines) # Example usage: code = """ def my_function(): print("Hello") if True: print("World") print("Done") """ dedented_code = dedent(code) print(dedented_code) code2 = """ def my_function(): pass """ dedented_code2 = dedent(code2) print(dedented_code2) code3 = """ """ # All blank lines dedented_code3 = dedent(code3) print(dedented_code3) code4 = " hello\n world\n" dedented_code4 = dedent(code4) print(dedented_code4) code5 = "hello\nworld\n" dedented_code5 = dedent(code5) print(dedented_code5) answer = dedent(''' print("hello") print("world") if True: print("true") else: print("false")''') expected = """print("hello") print("world") if True: print("true") else: print("false")""" assert answer == expected, f'Wrong answer; got {answer} instead of {expected}' print('All tests passed') |
def my_function():
print("Hello")
if True:
print("World")
print("Done")
def my_function():
pass
hello
world
hello
world
All tests passed
Testing if the previous output contains the string All tests passed
: True
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
Write a python function `dedent(str)` that takes as input a string of python code and de-dents it maximally. Lines that are entirely blank don't count.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The input string. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Preserve original blank lines if all lines are blank # Find the minimum indentation (excluding empty lines) min_indent = float('inf') for line in non_empty_lines: stripped_line = line.lstrip() if stripped_line: # Ignore lines that become empty after stripping indent = len(line) - len(stripped_line) min_indent = min(min_indent, indent) # Dedent all lines by the minimum indentation dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines return "\n".join(dedented_lines) # Test cases code1 = """ def foo(): print("Hello") print("World") """ code2 = """ def bar(): print("Test") """ code3 = """ """ # All blank lines print(dedent(code1)) print("-" * 20) print(dedent(code2)) print("-" * 20) print(dedent(code3)) |
I extracted the following code from that output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The input string. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Preserve original blank lines if all lines are blank # Find the minimum indentation (excluding empty lines) min_indent = float('inf') for line in non_empty_lines: stripped_line = line.lstrip() if stripped_line: # Ignore lines that become empty after stripping indent = len(line) - len(stripped_line) min_indent = min(min_indent, indent) # Dedent all lines by the minimum indentation dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines return "\n".join(dedented_lines) # Test cases code1 = """ def foo(): print("Hello") print("World") """ code2 = """ def bar(): print("Test") """ code3 = """ """ # All blank lines print(dedent(code1)) print("-" * 20) print(dedent(code2)) print("-" * 20) print(dedent(code3)) |
Running the following program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | import textwrap def dedent(str): """ De-dents a string of Python code maximally, ignoring entirely blank lines. Args: str: The input string. Returns: The de-dented string. """ lines = str.splitlines() non_empty_lines = [line for line in lines if line.strip()] if not non_empty_lines: return "\n".join(lines) # Preserve original blank lines if all lines are blank # Find the minimum indentation (excluding empty lines) min_indent = float('inf') for line in non_empty_lines: stripped_line = line.lstrip() if stripped_line: # Ignore lines that become empty after stripping indent = len(line) - len(stripped_line) min_indent = min(min_indent, indent) # Dedent all lines by the minimum indentation dedented_lines = [] for line in lines: if line.strip(): dedented_lines.append(line[min_indent:]) else: dedented_lines.append(line) # Preserve blank lines return "\n".join(dedented_lines) # Test cases code1 = """ def foo(): print("Hello") print("World") """ code2 = """ def bar(): print("Test") """ code3 = """ """ # All blank lines print(dedent(code1)) print("-" * 20) print(dedent(code2)) print("-" * 20) print(dedent(code3)) answer = dedent(''' print("hello") print("world") if True: print("true") else: print("false")''') expected = """print("hello") print("world") if True: print("true") else: print("false")""" assert answer == expected, f'Wrong answer; got {answer} instead of {expected}' print('All tests passed') |
1 2 3 4 5 6 7 8 | def foo(): print("Hello") print("World")</p> <hr /> <p>def bar(): print("Test")</p> <hr /> <p>All tests passed |
Testing if the previous output contains the string All tests passed
: True