既然你想知道爲什麼打印語句是不是在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()
我希望這個版本是爲什麼打印語句是不是在更清晰循環, 和爲什麼for i in range(number): string = input()
是錯誤的。
P.S.我想你的意思是爲什麼打印不會在第二循環中, 但事實證明,你的意思是爲什麼印刷是不是在第一個循環:
Output should be: NO YES YES all in different lines
是的,你是對的。代碼錯誤地縮進。
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
不應返回字符串List[str]
的int
和str
, 而是int
和一個列表。 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)]
意味着 構建基於range(number)
, 在每個元素的列表range(number)
, 填寫結果input()
在要建立的列表中。 它有時比for循環更清晰。
而實際上number
不is_palindrome
使用, 只是將其刪除
def is_palindrome(string):
# function body dose not need to change
然後改變main
功能:
def main():
# change string to strings accordingly
number, strings = get_inputs()
# change result to result in a way similar to
# the change of `string -> strings` in `get_inputs()`.
results = [is_palindrome(string) for string in strings]
for result in results:
report(result)
# We could write [report(result) for result in results] here.
# But we are not interested in the result list
# The result list will be [None, None, ...].
# So this is side-effects only.
# A for loop is usually preferred for side-effects only,
# and list comprehension for building a list.
爲什麼你認爲版畫應該是在循環? – jackarms
我很困惑:首先,這個程序似乎並沒有檢查字符串是否是迴文(可能你的意思是字符串的一些排列是否可能是迴文?)。其次,你爲什麼想知道爲什麼印刷報表不在循環中? – MyStackRunnethOver
我是python新手。我簡直就是從今天開始。 – Kuais