我尝试使用for循环遍历输入(字符串)的长度,但是当我尝试使用len()或range()时,它们给我错误,表明类型错误。
此代码是Cows and Bulls游戏的开始。 尝试将对象类型更改为列表。 在崇高文字和空闲之间切换。 我使用type()方法检查了输入的类型
import random
target = [random.randint(0, 9) for i in range(4)]
turns = 0
all_cows = False
while not all_cows:
guess = input('Cows and Bulls!\nguess 4 numbers: ')
turns += 1
#tried doing range(guess) does not work! *type of guess is string
#len(guess) - error cant iterate through int
#range(guess) error cannot be interpreted as an integer
for item in len(guess):
if guess[item] == target[item]:
print('cow')
elif guess[item] in target:
print('bull')`
程序输出:
Cows and Bulls!
guess 4 numbers: 1111
Traceback (most recent call last):
File "D:\Computers\Programming\Python\Codes\Exercises\17.py", line 8, in <module>
for item in len(guess):
TypeError: 'int' object is not iterable
Cows and Bulls!
guess 4 numbers: 1111
Traceback (most recent call last):
File "D:\Computers\Programming\Python\Codes\Exercises\17.py", line 8, in <module>
for item in range(guess):
TypeError: 'str' object cannot be interpreted as an integer
答案 0 :(得分:2)
您需要结合使用range()
和len()
。通过使用
for index in range(len(guess)):
# your code here
您可以遍历整个猜测。
您也可以直接在guess
上进行迭代,但是由于还需要每个字符的索引,因此需要使用enumerate()
。这将为每个字符返回两个值,第一个是索引,第二个是字符本身。所以你会做:
for index, c in enumerate(guess):
# your code here with index as the index and c as the character
答案 1 :(得分:0)
您的问题是guess
获得的input
属于字符串类型(与输入一样)。那么,len(guess)
的类型显然是int。您不能遍历int,因为它不是序列。您可以选择几种方法来克服此问题:
range
遍历索引:for i in range(len(guess)):
if int(guess[i]) == target[i]:
enumerate
:for i, c in enumerate(guess):
if int(c) == target[i]:
int
s列表:guess = input('Cows and Bulls!\nguess 4 numbers: ')
guesses = [int(c) for c in guess]
for i in range(len(guess)):
if guess[i] == target[i]:
也可以使用map
:guesses = list(map(int, guess))
完成
答案 2 :(得分:0)
input()
python3中的函数将eac值用作str
因此,您需要使用int
函数将其转换为int()
检查以下代码:
import random
target = [random.randint(0, 9) for i in range(4)]
turns = 0
all_cows = False
while not all_cows:
guess = input('Cows and Bulls!\nguess 4 numbers: ')
turns += 1
#Iterate String Directly
for item in guess:
#Convert Substring into int for using as Indices
if guess[int(item)] == target[int(item)]:
print('cow')
elif guess[int(item)] in target:
print('bull')
答案 3 :(得分:0)
感谢大家为我提供帮助。 似乎问题出在我不了解len()正确的地方,我忘了它返回的长度为int,并且当err表示对象类型为int时感到困惑。
解决方案1:使用range(len(guess))遍历字符串的长度。
解决方案2:直接遍历字符串-这不是我要搜索的内容,因为我想使用“ item”为字符串编制索引。
解决方案3:使用我从未听说过的enumerate(guess)(因此,如果某人感到无聊并想要解释它,请不胜感激! 编辑:得到我的答案。