Python startswith 和 endswith 的脚本
Python Script for startswith and endswith
所以我制作了这个脚本:
names = open("names.txt","r")
for loop in names:
if loop.endswith('s'):
print(loop)
for loop in names:
if loop.startswth('A'):
print(loop)
有一个名为 names.txt
的文件,里面有 10 个名字。该程序应该打印所有以 A 开头的名称和以 s 结尾的名称,但它不起作用。你能帮帮我吗?
这是您要找的吗?
def clean(names):
return [name.strip().lower() for name in names]
with open("names.txt", "r") as names:
for name in clean(names):
if name.startswith('a') and name.endswith('s'):
print(name)
请记住 startswith
和 endswith
区分大小写。在此解决方案中添加 lower()
使其不区分大小写。如果需要,您可以从 clean()
方法中删除它。
此外,正如@ShadowRanger 所指出的那样,您需要去除以 rstrip
结尾的行(右侧去除)。此解决方案使用 strip()
,它还会清除名称字符串开头的所有空格,例如如果有制表符或空格,它们将被删除。
你有几个问题:
- 您有两个循环,但文件已被第一个循环耗尽,因此第二个循环永远不会运行(它发现
names
为空并绕过循环主体)
- 您正在测试
endswith('s')
,但几乎每一行实际上都会以换行符结尾,您没有删除它
作为对这两个问题的最低限度的修复(保持两个循环的行为,因此您分别打印以 s
结尾的行):
with open("names.txt") as names:
for loop in names:
loop = loop.rstrip('\n') # Remove trailing newline, if any, to avoid doubled
# newline on print and make test work
if loop.endswith('s'):
print(loop)
names.seek(0) # Reset file pointer to beginning of file
for loop in names:
loop = loop.rstrip('\n') # Same strip as in prior loop
if loop.startswith('A'):
print(loop)
如果单次打印任何通过行都可以,并且不需要将以 A
开头和以 s
结尾的行打印两次,则可以简化为:
with open("names.txt") as names:
for loop in names:
loop = loop.rstrip('\n') # Remove trailing newline, if any, to avoid doubled
# newline on print and make test work
if loop.startswith('A') or loop.endswith('s'):
print(loop)
所以我制作了这个脚本:
names = open("names.txt","r")
for loop in names:
if loop.endswith('s'):
print(loop)
for loop in names:
if loop.startswth('A'):
print(loop)
有一个名为 names.txt
的文件,里面有 10 个名字。该程序应该打印所有以 A 开头的名称和以 s 结尾的名称,但它不起作用。你能帮帮我吗?
这是您要找的吗?
def clean(names):
return [name.strip().lower() for name in names]
with open("names.txt", "r") as names:
for name in clean(names):
if name.startswith('a') and name.endswith('s'):
print(name)
请记住 startswith
和 endswith
区分大小写。在此解决方案中添加 lower()
使其不区分大小写。如果需要,您可以从 clean()
方法中删除它。
此外,正如@ShadowRanger 所指出的那样,您需要去除以 rstrip
结尾的行(右侧去除)。此解决方案使用 strip()
,它还会清除名称字符串开头的所有空格,例如如果有制表符或空格,它们将被删除。
你有几个问题:
- 您有两个循环,但文件已被第一个循环耗尽,因此第二个循环永远不会运行(它发现
names
为空并绕过循环主体) - 您正在测试
endswith('s')
,但几乎每一行实际上都会以换行符结尾,您没有删除它
作为对这两个问题的最低限度的修复(保持两个循环的行为,因此您分别打印以 s
结尾的行):
with open("names.txt") as names:
for loop in names:
loop = loop.rstrip('\n') # Remove trailing newline, if any, to avoid doubled
# newline on print and make test work
if loop.endswith('s'):
print(loop)
names.seek(0) # Reset file pointer to beginning of file
for loop in names:
loop = loop.rstrip('\n') # Same strip as in prior loop
if loop.startswith('A'):
print(loop)
如果单次打印任何通过行都可以,并且不需要将以 A
开头和以 s
结尾的行打印两次,则可以简化为:
with open("names.txt") as names:
for loop in names:
loop = loop.rstrip('\n') # Remove trailing newline, if any, to avoid doubled
# newline on print and make test work
if loop.startswith('A') or loop.endswith('s'):
print(loop)