Как я могу использовать список в диапазоне от l oop? - PullRequest
0 голосов
/ 08 января 2020
consonant_letters = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'X', 'Z']
for x in range(9999):
    for y in range(consonant_letters):
        for z in range(consonant_letters):
            for a in range(consonant_letters):
                print(f'{x} {y} {z} {a}')

* И что я получаю, это

TypeError: объект 'list' не может быть интерпретирован как целое число

* Я пытаюсь напечатать все числа в системе номерных знаков Spani sh, преобразуйте ее в список и, наконец, выполните функцию ввода, когда пользователь вводит определенный номерной знак, и программа сообщает ему, сколько существует номерных знаков до этой системы номерных знаков концы.

* Редактировать: теперь я обнаружил, что единственное, что я оставил и не могу понять, это как сформулировать функцию ввода. Вот решение:

consonant_letters = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M',    
'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'X', 'Z']

for x in range(10000):
    break
    if x < 1000 and x > 99:
        x = f"0{x}"
    elif x < 100 and x > 9:
        x = f"00{x}"
    elif x < 10:
        x = f"000{x}"
    for y in consonant_letters:
        for z in consonant_letters:
            for a in consonant_letters:
                print(f'{x} {y} {z} {a}')

* Я попытался ввести функцию ввода, чтобы пользователь мог ввести определенный номерной знак, и я обнаружу, существует ли он, но есть проблема. Вот что я попробовал:

`consonant_letters = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L',      
'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'X', 'Z']
for x in range(10000):
if x < 1000 and x > 99:
    x = f"0{x}"
elif x < 100 and x > 9:
    x = f"00{x}"
elif x < 10:
    x = f"000{x}"
for y in consonant_letters:
    for z in consonant_letters:
        for a in consonant_letters:
            list_1 = f'{x} {y}{z}{a}'
            license_plate_user = input("Write the license plate: ")
            print(license_plate_user in list_1)`

* Когда я представляю любой другой номерной знак, который не 0000 BBB (первый), он говорит Ложь. Я знаю, это означает, что l oop выполняется только один раз, но я не знаю, как это исправить.

* Редактировать; Я понял, как выполнить l oop, а затем сформулировать ввод, но у меня остался еще один вопрос. Есть ли операция, которую я могу написать, зная конкретный c номерной знак, чтобы узнать, сколько осталось?

consonant_letters = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M',   
'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'X', 'Z']
for x in range(10000):
if x < 1000 and x > 99:
    x = f"0{x}"
elif x < 100 and x > 9:
    x = f"00{x}"
elif x < 10:
    x = f"000{x}"
for y in consonant_letters:
    for z in consonant_letters:
        for a in consonant_letters:
            list1 = f'{x} {y}{z}{a}'
            if "9999 ZZZ" in list1:
                license_plate_user = input("Write the license plate: ")
                license_plate_user in list1
                if license_plate_user:
                    print("Operation I do not know yet")
                else:
                    print("Wrong values")

* Редактировать: я нашел способ, но он не работает, и я не знаю почему :

consonant_letters = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 
'N', 'P', 'R', 'S', 'T', 'V', 'X', 'Z']
total_number_of_license_plates = 80000000
for x in range(10000):
    if x < 1000 and x > 99:
        x = f"0{x}"
    elif x < 100 and x > 9:
        x = f"00{x}"
    elif x < 10:
        x = f"000{x}"
    for y in consonant_letters:
        for z in consonant_letters:
            for a in consonant_letters:
                list1 = f'{x} {y}{z}{a}'
                if "9999 ZZZ" in list1:
                    license_plate_user = input("Write the license   
plate: ")
                    license_plate_user in list1
                    if license_plate_user:
                        print(list1.index(license_plate_user))
                        license_plates_left = 
total_number_of_license_plates - list1.index(license_plate_user)
                        print(f'There are {license_plates_left} license 
plates left')
                    else:
                        print("Wrong values")

И что я получаю:

ValueError: подстрока не найдена

Ответы [ 3 ]

1 голос
/ 08 января 2020

Вы можете сделать это с помощью one l oop:

from itertools import product

for x, (y, z, a) in product(range(9999), product(consonant_letters, repeat=3)):
    print(f'{x} {y} {z} {a}')
1 голос
/ 08 января 2020

диапазон принимает целые или целые числа в качестве входных данных. Если вы не уверены, как использовать данное слово, вы можете запустить python intrepeter и спросить его - в этом случае:

help(range)

ваш код будет работать после замены всех range(consonant_letters) на consonant_letters, но Хочу отметить, что ваша задача - идеальное место для использования itertools.product. Рассмотрим следующий пример:

import itertools
x = ['A','B','C']
for x1,x2,x3 in itertools.product(x,repeat=3):
    print(f'{x1} {x2} {x3}')

Вывод:

A A A
A A B
A A C
A B A
A B B
A B C
A C A
A C B
A C C
B A A
B A B
B A C
B B A
B B B
B B C
B C A
B C B
B C C
C A A
C A B
C A C
C B A
C B B
C B C
C C A
C C B
C C C

Как видите, вы можете использовать один for -l oop вместо (в данном случае) 3 вложенные for -циклы.

1 голос
/ 08 января 2020

Вы не можете использовать range () со списком, используйте это:

for x in range(9999):
    for y in consonant_letters:
        for z in consonant_letters:
            for a in consonant_letters:
                print(f'{x} {y} {z} {a}')
...