2017-09-18 1 views
0

In diesem Fall iteriert die 'num' in meiner ursprünglichen for-Schleife über eine Liste von Ziffern. Ich verstehe nicht, warum ich den Fehler bekomme, dass ein int-Objekt nicht iterierbar ist? Kann jemand erklären, worum es hier geht?TypeError: 'int' -Objekt ist nicht iterierbar - Was ist die Funktionalität der Counter-Variablen in for-Schleifen?

import random 

base_num = [] 
for _ in range(3): 
    base_num.append(random.randint) 

while True: 
    cow = 0 
    bull = 0 
    num_to_compare = input("what would you like to guess?") 
    num_list = [int (d) for d in str(num_to_compare)] 
    if num_to_compare == base_num: 
     break 
    else: 
     for num in len(num_list): 
      for base in len(base_num): 
       if num_list[num] == base_num[num]: 
        cow += 1 
       elif num_list[num] == base_num[base]: 
        bull += 1 
    print cow, bull 
+1

ist 'random.randint' sein muss' random.randint() '. Außerdem ist 'num_to_compare' niemals gleich' base_num', da einer eine Zeichenfolge und der andere eine Liste ist. – DyZ

Antwort

1

for num in len(num_list):

Dies bedeutet im Wesentlichen for num in 3: oder eine andere Zahl als 3 (len Ihrer num_list), die eine int und nicht wiederholt werden kann. Dies ist es, was der Fehler Ihnen sagt.

Sie könnten tun wollen:

for num in num_list: wenn Sie jedes Element in num_list iterieren möchten, oder

for num in range(len(num_list)):, wenn Sie auf den Indizes iterieren wollen

Sie könnten auch über lesen wollen enumerate

das Gleiche gilt für die Zeile: for base in len(base_num):

Auch kann num_list = [int (d) for d in str(num_to_compare)] sein num_list = [int (d) for d in num_to_compare] als num_to_compare bereits ein str

Edit ist:

Abgesehen davon als @DYZ kommentiert hat, wenn durch diese: base_num.append(random.randint) Sie einige Zufallszahlen in der Liste anhängen möchten sollte es base_num.append(random.randint(a, b)), wo Sie eine Zufallszahl N so dass a<=N<=b

randint doc

bekommen

Wieder wie @DYZ zeigte num_to_compare == base_num immer False geben, weil num_to_compare a str während base_num ein list

Verwandte Themen