Проблемы с временем l oop (python база) - PullRequest
1 голос
/ 27 января 2020

Я недавно использую Python, и мне нужно немного помочь с этим, пока l oop:

List=[]
x=str(input("name: "))
y=int(input("mark: "))
List.append(x,y)
while x!="0":
    x=str(input("name: "))
    y=int(input("mark: "))
    List.append((x,y))

Проблема этого while-l oop заключается в том, что когда я ставлю '0' после 'name:', чтобы сломать l oop, программа не прерывается сразу: наоборот, она запрашивает у y ('mark:') и в выводе также выводит мне кортеж (' 0 ', 0)

Я постараюсь быть более ясным:

***Expected output:***

name: Lisa

mark: 6

name: John

mark: 8

name: 0

[('Lisa',6),('John',8)]

***My actual output with my code:***

name: Lisa

mark: 6

name: John

mark: 8

name: 0

mark:0  #I put 0 because the program asks me for another int (wrong)

[('Lisa',6),('John',8),('0',0)]

Я также пытался с этим кодом, та же самая проблема:

while True:
    if x=="0":
        break
    else:
         x=str(input("inserisci cognome: "))
         y=int(input("inserisci voto: "))
         List.append((x,y))

Ответы [ 4 ]

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

Это простой пример. Я предположил, что вы хотите добавить кортеж в список. В этом примере while будет работать вечно, если только x не равен «0».

List = []

while True:
     x=str(input("inserisci cognome: "))
     if x == "0":
         break
     y=int(input("inserisci voto: "))
     List.append((x,y))
1 голос
/ 27 января 2020

Вы должны отсортировать это наоборот:

List=[]
x=str(input("name: "))
while x!='0':
    y=int(input("mark: "))
    List.append(x,y)
    x=str(input("name: "))
1 голос
/ 27 января 2020

в то время как циклы не заканчиваются, когда условие становится ложным в любом месте. Способ, которым работают циклы while, заключается в том, что они проверяют условие, и если оно истинно, они запускают все строки в l oop, а затем перепроверяют условие. Вы устанавливаете x равным 0, но две другие строки будут по-прежнему выполняться (с запросом Y и добавлением в список) до того, как будет проверена l oop. Это хакерское решение, но вы можете попробовать его.

name_list=[]
x = ""
while x!='0':
    x=str(input("name: "))
    if x == '0':
        break
    y=int(input("mark: "))
    name_list.append((x,y))

Надеюсь, это поможет!

PS Также, вероятно, хорошей практикой является не вызывать списки List

0 голосов
/ 27 января 2020

Почему бы не ввести y после проверки x равно 0 или нет?

List = []
x = str(input("name: "))
while x!='0':
    y = int(input("mark: "))
    List.append( (x,y) )  # Make Sure you insert only one argument in List which is a tuple (x, y)
    x = str(input("name: "))
...