我想知道为什么print("YES")
和print("NO")
不在for循环中。如果字符串的排列是回文x次数,则该程序循环。如果是,则打印"是"如果没有它打印" NO"。
number = int(input())
for i in range(number):
string = input()
found = False
char_set = set(string)
d_dict = {}
for c in char_set:
d_dict[c] = string.count(c)
odd_l = [e for e in d_dict.values() if e%2 == 1]
if len(odd_l) >1:
pass
else:
found = True
if not found:
print("NO")
else:
print("YES")
答案 0 :(得分:1)
因为您想知道为什么print语句不在for循环中, 我猜你自己没有写代码。 如果您的代码来自在线教程, 然后我建议换到另一个。
for i in range(number):
string = input()
这不起作用。 Python对布局很敏感。
for i in range(number):
string = input()
这是有效的Python代码。但语义可能是错误的。见下文。
if not found:
print("NO")
else:
print("YES")
对于你的问题,我很明显打印语句不应该在for循环中。
但是,如果我发现很难理解一长串代码, 我通常会尝试将其重构为小函数:
def get_inputs():
number = int(input())
for i in range(number):
string = input()
return number, string
def is_palindrome(number, string):
found = False
char_set = set(string)
d_dict = {}
for c in char_set:
d_dict[c] = string.count(c)
odd_l = [e for e in d_dict.values() if e%2 == 1]
if len(odd_l) >1:
pass
else:
found = True
return found
def report(found):
if not found:
print("NO")
else:
print("YES")
def main():
number, string = get_inputs()
result = is_palindrome(number, string)
report(result)
main()
我希望这个版本更清楚为什么print语句不在循环中,
以及为什么for i in range(number): string = input()
是错误的。
P.S。我以为你的意思是为什么打印不在第二个循环, 但事实证明你的意思是为什么打印不在第一个循环中:
输出应该是:NO YES YES全部在不同的行中
是的,你是对的。代码错误缩进。
number = int(input())
for i in range(number):
string = input()
# the algorithm does the work
if not found:
print("NO")
else:
print("YES")
一旦我们发现问题,请尝试修复它。
首先,回到规范:
给出一个数字和一些字符串,报告这些字符串的结果。
然后get_inputs
不应该返回int
和str
,
但是int
和字符串列表List[str]
。
Python如何代表and
的概念?
有些语言使用多个返回值,
Python没有。
相反,Python仍然返回一个值,但是这个值是一个包含两个值的元组。
return (first_result, second_result)
Python允许你省略括号:
return first_result, second_result
将get_inputs
更改为:
def get_inputs():
# do not need to touch this line
number = int(input())
# change string to strings
strings = [input() for i in range(number)]
# change return value accordingly
return number, strings
这里[input() for i in range(number)]
表示
根据{{1}}建立一个列表,
对于range(number)
中的每个元素,
在列表中填写range(number)
的结果进行构建。
它有时比for循环更清晰。
input()
实际上没有使用number
,
只需删除它
is_palindrome
然后更改def is_palindrome(string):
# function body dose not need to change
功能:
main