Проблема с программой, которая преобразует список заданного числа в определенную временную шкалу

#python

Вопрос:

Я новичок в python и программировании в целом, и я пытаюсь создать программу, которая принимает как можно больше значений и преобразует это значение в определенную шкалу температуры. Но я застрял, и это продолжает давать мне ошибку ценности. Если есть какой-либо другой способ заставить эту программу работать, например, в цикле for, я буду рад узнать! Заранее спасибо.

вот мой код:

 mylist = [] temp = int(input("How many temperature values do you want to take? ")) tuple(mylist)  def convert_temp(temp_scale, source_temp):  if temp_scale == "F" or "f":  return 'C', (source_temp - 32) * 5.0 / 9.0  elif temp_scale == "C" or "c":  return 'F', (source_temp * (9.0 / 5.0))   32   temp_scale = input("Select F or C: ") source_temp = int(input("What are the temperature? ")) s, m = convert_temp(temp_scale, source_temp) print(source_temp, 'degrees', temp_scale.title(), 'is', m, 'degrees', s)  

выход:

 How many temperature values do you want to take? 5 Select F or C: F What are the temperature? 80, 90, 100 Traceback (most recent call last):  File "c:usersrainimu_codeblank.py", line 12, in lt;modulegt;  source_temp = int(input("What are the temperature? ")) ValueError: invalid literal for int() with base 10: '80, 90, 100'  

Ответ №1:

Я улучшаю свой собственный ответ:

 mylist = [] printed_temperatures = 0  def convert_temp(temp_scale, source_temp):  if temp_scale == "F" or "f":  return 'C', (source_temp - 32) * 5.0 / 9.0  elif temp_scale == "C" or "c":  return 'F', (source_temp * (9.0 / 5.0))   32   temp_scale = input("Select F or C: ") total_temperatures = int(input("How many temeratures do you want to give? ")) for i in range(total_temperatures):  source_temp = int(input("What is the temperature? "))  mylist.append(source_temp)  s, m = convert_temp(temp_scale, source_temp)  print(mylist[i], 'degrees', temp_scale.title(), 'is', m, 'degrees', s)  

Это займет целое число от общего числа значений, как и раньше, а затем спросит вас о температуре столько же раз, сколько значение total_temperatures, и преобразует их в f или c по вашему выбору.

Комментарии:

1. Ааа! В точку! Это то, чего я пытаюсь достичь! Большое спасибо! Я попытаюсь изменить это, попросив пользователя ввести данные, сохранить их в списке, а затем преобразовать их из списка. Что-то вроде этого: «Выберите F или C : F Сколько значений температуры?: 2 Введите значение температуры : 1 Введите значение температуры: 2 Температура по Фаренгейту : [ x, x ] `

2. Кстати, когда я пытаюсь преобразовать с помощью этого кода из C в F, он выдает тот же результат, что и F в C.

3. Я думаю, что это работает, если мы преобразуем f в c, но c в f не работает. Позвольте мне отладить это

4. После тысяч проверок я увидел, что в строках № 5 и 7 я ввел if temp_scale == "F" or == "f": и if temp_scale == "C" or == "c": соответственно. но оператор «или» здесь не будет работать, потому что в python после оператора «или» вы должны снова поставить условие, не соответствующее предыдущему. Замените строки 5 и 7 на if temp_scale == "F" or temp_scale == "f": и if temp_scale == "C" or temp_scale == "c": соответственно, и тогда я уверен, что это сработает!

Ответ №2:

int() ожидает, что будет взята строка, которая может быть представлена в виде одного целого числа, а не нескольких! Самый простой способ справиться с вашим конкретным случаем, вероятно, с помощью цикла:

 temp_scale = input("Select F or C: ") source_temp = int(input("What are the temperature? "))  # str.split() will convert a string into a list of substrings,  # which were separated in the main string by the given character # e.g. in this case, "80, 90, 100" -gt; ["80", " 90", " 100"] for temp in source_temp.split(','):  # will iterate once for every item in the thing we're iterating over  # in this case, will iterate three times:  # temp = "80", temp = " 90", and temp = " 100"  s, m = convert_temp(temp_scale, temp)  print(temp, 'degrees', temp_scale.title(), 'is', m, 'degrees', s)  

В этом случае я решил сохранить структуру вашего исходного кода и напечатать новую строку для каждой заданной температуры. Вы можете поэкспериментировать, возможно, с размещением результатов s и m в их собственных списках, а затем каким-то образом сжать весь список в одну строку вывода после завершения цикла.

Ответ №3:

На самом деле в строке № 12 вы вводите 80, 90, 100, а затем преобразуете их в целое число. Поскольку «,» не может быть преобразовано в int, это дает ошибку значения. С кодом нет никаких проблем.

Вы можете попробовать ввести одно целое число во входных данных «Каковы температуры? «в терминале.

Или вы тоже можете попробовать этот код:

 mylist = [] temp = int(input("How many temperature values do you want to take? ")) tuple(mylist)  def convert_temp(temp_scale, source_temp):  if temp_scale == "F" or "f":  return 'C', (source_temp - 32) * 5.0 / 9.0  elif temp_scale == "C" or "c":  return 'F', (source_temp * (9.0 / 5.0))   32   temp_scale = input("Select F or C: ") total_temperatures = int(input("How many temeratures do you want to give? ")) for i in range(total_temperatures):  source_temp = int(input("What is the temperature? ")) s, m = convert_temp(temp_scale, source_temp) print(source_temp, 'degrees', temp_scale.title(), 'is', m, 'degrees', s)  

Надеюсь, это сработало!

Комментарии:

1. Спасибо! Так что это работает. Но он преобразует только последнее значение, которое я ему даю. Там чего-то не хватает!

2. хорошо, да, подождите, я дам вам обновленный код как можно скорее!

Ответ №4:

Вы близки к тому, что вы упустили из виду, как хранить все числа, так как вы не можете преобразовать строку int в один int при сборе значений для source_temp_input .

 temp = int(input("How many temperature values do you want to take?"))  def convert_temp(temp_scale, source_temp):  # checking for both upper and lowercase is unnecessary  # instead lowercase the temp_scale and check if its `f`   if temp_scale.lower() == "f":  return "C", (source_temp - 32) * 5.0 / 9.0  elif temp_scale.lower() == "c":  return "F", (source_temp * (9.0 / 5.0))   32  temp_scale = input("Select F or C:") source_temp_input = input("What are the temperatures?") # Use a list comprehension that splits the string by the comma  # then you remove all the whitespace using strip()  # finally you will need to convert them to int source_temp = [int(temp.strip()) for temp in source_temp_input.split(",")] # Now your `source_temp` is a list of ints which you loop over and # convert the temperature  for idx, temp in enumerate(source_temp):  s, m = convert_temp(temp_scale, temp)  # Use f"" string here instead of just printing the values  # m:.2f just rounds off the value m to 2 decimal places  print(f"{source_temp[idx]} degrees {temp_scale.title()} is {m:.2f} degrees {s}")  

Выход:

 How many temperature values do you want to take?3 Select F or C:F What are the temperatures?80, 90, 100 80 degrees F is 26.67 degrees C 90 degrees F is 32.22 degrees C 100 degrees F is 37.78 degrees C   How many temperature values do you want to take?3 Select F or C:C What are the temperatures?80, 90, 100 80 degrees C is 176.00 degrees F 90 degrees C is 194.00 degrees F 100 degrees C is 212.00 degrees F  

Комментарии:

1. Я попытался использовать ваше это, но это дает мне ошибку на выходе, которая: File "lt;fstringgt;", line 1 (m.2f) ^ SyntaxError: invalid syntax

2. @RainierEnriquez ой должно быть {m:.2f} , обновил ответ.

3. Большое спасибо! Это сработало. Мне тоже любопытно, как я могу заставить это работать без использования перечисления? Фактический план состоял в том, чтобы добавить определенное количество временных(чисел) от пользователя, а затем добавить их в неизменяемый список, а затем преобразовать их в определенную временную шкалу.

4. Ах, неизменяемый список был бы кортежем, но вам все равно нужно было бы перебирать их и распечатывать результаты. Поэтому я не понимаю, как бы вы это сделали без помощи перечисления. Возможно, вы могли бы использовать map() одно для convert_temp печати, а другое для печати выходных данных, но в этом нет необходимости.

5. Ах, это тоже то же самое, что и ваш ответ, но гораздо проще. Хахаха! Но и то и другое очень полезно. Разные идеи-это хорошо. Я имею в виду, что, насколько я знаю, его код было легче понять. Но и то, и другое, несмотря ни на что, является хорошим вкладом.