不能不通过range()或len()遍历元素

时间:2019-07-18 10:51:40

标签: python python-3.x

我尝试使用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

4 个答案:

答案 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,因为它不是序列。您可以选择几种方法来克服此问题:

  1. 使用range遍历索引:
for i in range(len(guess)):
    if int(guess[i]) == target[i]:
  1. 您可以使用enumerate
for i, c in enumerate(guess):
    if int(c) == target[i]:
  1. 将您的输入从用户转到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]:

也可以使用mapguesses = 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)(因此,如果某人感到无聊并想要解释它,请不胜感激! 编辑:得到我的答案。