[英]Python - char and index match
我不知道我在做什么錯。 我想要一種在兩個字符串中匹配char和position的簡單方法。 錯誤是它無法識別我打算作為索引的內容。
我是新來的。 :)我認為專家可以理解我在這里開始嘗試做的事情。 我不想復制復雜的牛市和牛市代碼,我只是想盡早完成這一部分。 請指教:
def bulls_and_cows(real, guess):
bulls = 0
cows = 0
for i in guess:
if i == i in real:
if i[x] == i[x]
bulls = bulls + 1
print ("Bullseye!")
print(bulls)
else:
print("No")
bulls_and_cows("like", "brig")
在行中
for i in guess:
變量i將是字符串猜測中的每個字符,而不是索引。 如果打算同時獲取索引和字符,則需要使用enumerate() 。
接下來,我不確定您打算比較什么
if i == i in real:
同樣,x在此行之前的任何位置均未初始化:
if i[x] == i[x]
您可以使用很多方便的工具,尤其是zip
:
from collections import Counter
def bulls_and_cows(real, guess):
# count bulls
bulls = sum(x == y for x, y in zip(real, guess))
# get letter counts separately for each string
c1, c2 = map(Counter, (real, guess))
# cows: sum min count for any letter, subtract bulls
cows = sum(min(c1[x], c2[x]) for x in set(real) | set(guess)) - bulls
print(bulls, cows)
對於純粹的顯式迭代多頭計數:
def bulls_and_cows(real, guess):
bulls = 0
for r, g in zip(real, guess):
if r == g:
bulls += 1
print(bulls)
我想您正在嘗試這樣做:
def bulls_and_cows(real, guess):
bulls = 0
cows = 0
for i in range(len(guess)):
if guess[i] == real[i]:
bulls = bulls + 1
print ("Bullseye!")
else:
cows += 1
if bulls == 0:
print("No")
else:
print("Bulls: " , bulls, " Cows: ", cows)
bulls_and_cows("like", "brig")
如果不是您想要的,請告訴我,以便我能為您提供更多幫助。 此代碼打印“ Bullseye!” 每次猜測的char都在同一位置匹配真實的char。 如果不匹配,則打印“否”。 我不明白為什么一開始需要牛= 0,因為您從未在代碼中使用它。
還請注意,縮進在python中非常重要。 因此,在您的代碼中,if后面的至少一行應縮進。 另外,在此代碼中,我假設兩個輸入字符串的長度相同。 如果沒有,您可能會遇到錯誤。 為防止此類錯誤,最好在函數開始時比較兩個字符串的長度:
if len(real) != len(guess):
print("The strings Length does not match!")
return
如果您堅持要比較字符串,即使它們的長度不同,則防止此錯誤的另一種方法是更改代碼,如下所示:
def bulls_and_cows(real, guess):
bulls = 0
cows = 0
real_len = len(real)
guess_len = len(guess)
for i in range(real_len):
if i < guess_len and guess[i] == real[i]:
bulls = bulls + 1
print ("Bullseye!")
else:
cows += 1
if bulls == 0:
print("No")
else:
print("Bulls: " , bulls, " Cows: ", cows)
希望下面的代碼對您來說不太高級。 它使用了非常方便的enumerate
函數,該函數使我們可以遍歷字符串並獲取索引和字符。 實際上, enumerate
是一個通用函數,當我們需要獲取項目及其索引時,可以在任何for
循環上使用。
def bulls_and_cows(real, guess):
bulls = cows = 0
for i, c in enumerate(guess):
if c in real:
# We have a match!
if real[i] == c:
# And it's in the correct position
bulls += 1
else:
cows += 1
print('Bulls', bulls, 'Cows', cows)
bulls_and_cows("like", "brig")
輸出
Bulls 0 Cows 1
我的代碼無法產生您想要的確切輸出,但是我敢肯定您可以弄清楚。 ;)
如果您不太了解我的代碼的工作原理,請嘗試將
print(i, c)
作為for i, c in enumerate(guess):
的第一行, for i, c in enumerate(guess):
塊中的if c in real:
行中的if c in real:
之前。
我的老師指出,我應該從“母牛”部分開始,然后針對這些結果,將其范圍縮小到多頭。 這是我整理的工作答案。 我感謝這些建議!
def bulls_and_cows(real, guess):
bulls = 0
cows = 0
for i in guess:
if i == i in real:
cows = cows+1
if guess.index(i) == real.index(i):
cows = cows -1
bulls = bulls +1
print("Bulls: " + str(bulls))
print("Cows: " + str(cows))
對於每種情況,您還可以使用1個襯板:
real = "like"
guess = "brig"
print("Bulls", sum(1 for x in zip(real, guess) if x[0] == x[1])) # Bulls 0
print("Cows", sum(1 for x in real if x in guess and real.index(x) != guess.index(x))) # Cows 1
第一個“壓縮”單詞並計算具有相似字符的元組。 第二個,查找兩個單詞中但位於不同索引中的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.