所以我做了这个脚本:
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 结尾的名称,但它不起作用。你能帮助我吗?
所以我做了这个脚本:
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 结尾的名称,但它不起作用。你能帮助我吗?
你有几个问题:
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)
这是你要找的吗?
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()
,它还清除名称字符串开头的所有空格,例如,如果有制表符或空格,它们将被删除。