#python #range
Вопрос:
Я хотел бы преобразовать входные данные в диапазон с интервалом. Кто-нибудь может мне помочь, пожалуйста.
Ask the user what will be the input of the user either in Celsius or Fahrenheit. If the input is invalid, print invalid and ask to try again.
Ask the user to input the start, range, and interval separated by an asterisk. For example 0*10*2. This means that the start of the conversion will be from 0 to 10 with an interval of 2, thus the value to be converted will be 0, 3, 6, 9
Если начало<конец, то интервал должен быть равен 0
Если начало>конец, то интервал должен быть 0>>интервал, в противном случае ваша программа выдаст ошибку и попросит повторить попытку для #2.
Если пользователь вводит только одно значение, например 10. Это означает, что начало равно 1, что будет значением по умолчанию для начала, до 10, а интервал равен 2, что будет значением по умолчанию для интервала, если начать
Если пользовательский ввод имеет два значения, например 10*2, это означает, что начало равно от 10 до 2. Интервал установлен на значение по умолчанию, равное -2 с момента начала>окончания.
ask = input("What would you like to choose? Celcius = 1, Fahrenheit = 2. nPick option 1 or 2: ")
asks = float(ask)
if asks == 1:
rng = input("Enter the start, range, interval. n example 0*10*2:").split("*")
rng = range(rng)
print(rng)
Ответ №1:
answer1_flag = 0
while answer1_flag == 0:
ask = input("What would you like to choose? Celcius = 1, Fahrenheit = 2. nPick option 1 or 2: ").strip()
if ask == '1' or ask=='2':
answer1_flag = 1
answer2_flag = 0
while answer2_flag==0:
rng = input("Enter the start, range, interval. n example 0*10*2:").strip()
count = rng.count('*')
if count==0:
start = 1
end = int(rng)
interval = 2
elif count==1:
start,end = map(int,rng.split("*"))
if start<end:
interval = 2
elif start>end:
interval = -2
elif count==2:
start,end,interval = map(int,rng.split("*"))
if start>end and interval>0:
print('Error! If start>end then interval should be a negative number! Please enter the input again.')
elif start<end and interval<0:
print('Error! If start<end then interval should be a positive number! Please enter the input again.')
else:
rng = range(start,end,interval)
answer2_flag = 1
else:
print('Invalid! Try again.')
print(rng)
Комментарии:
1. Большое вам спасибо, мэм/сэр, за то, что просветили меня ❤❤
2. Я отредактировал первый аргумент функции map просто до «int», что делает его еще более простым. (И, кстати, добро пожаловать! :))
Ответ №2:
import sys
def get_celsisu_or_fahrenheit():
print("What would you like to choose: n1. Celsiusn2. Fahrenheitn")
cf = input("Enter (1/2): ")
if cf not in ["1", "2"]:
err()
get_celsisu_or_fahrenheit()
return cf
def get_value(is_celsuis):
values = input(f"Enter the value in {'Celsius' if is_celsuis else 'Fahrenheit'}: ").split("*")
values = list(map(lambda x: int(x), values))
start, end, interval = assign_values(values)
# conditions
if start < end and not 0 < interval:
err() and sys.exit(0)
if start > end and not 0 > interval:
err() and sys.exit(0)
return start, end, interval
def assign_values(val):
start, end, interval = 1, None, None
if len(val) == 1:
end = val[0]
elif len(val) == 2:
start, end = val
elif len(val) == 3:
start, end, interval = val
else:
err()
get_value()
if interval is None:
interval = -2 if start > end else 2
return start, end, interval
def err():
print("ERROR: Please check your input and try again.")
print("----------------------------------------------")
def convert(grade, is_celsuis):
return (grade * 9 / 5) 32 if is_celsuis else (grade - 32) * 5 / 9
def start():
is_celsuis = True if get_celsisu_or_fahrenheit() == "1" else False
start, end, interval = get_value(is_celsuis)
rng = range(start, end, interval)
print(rng)
for x in rng:
is_celsuis and print(f"{x} Celsuis == {round(convert(x, is_celsuis), 2)} Fahrenheit")
not is_celsuis and print(f"{x} Fahrenheit == {round(convert(x, is_celsuis), 2)} Celsuis")
start()