Member 13003139 Ответов: 2

Как определить функции в Python?


В настоящее время я пишу программу на python, чтобы определить цены на боулинг, проверить, применимы ли специальные предложения, и вернуть стоимость на человека. Я должен определить три функции, используя операторы assignment и if / else.

Я написал код, однако он проваливает все тесты, через которые я его провожу. Может ли кто-нибудь просмотреть его и сказать мне, есть ли логическая ошибка? Я использовал визуализатор python, и он показывает, что он должен работать, однако это не так.

Что я уже пробовал:

def get_rate(start_hr, start_min, day, is_holiday):
	if (is_holiday ==True):
		if (start_hr <=18) and (start_min >=29):
			rate=4
			return 4
		else:
			rate=6
			return 6
	else:
		if (day <=4): 
			if (start_hr <=18) and (start_min <30):
				rate= 3
				return 3
			else:
				rate=5
				return 5
		else: 
			if (day == 5):
				if (start_hr <=18) and (start_min >=29):
					rate=3
					return 3
				else:
					rate=6
					return 6
			else:		
				if (day >=6):
					if (start_hr <= 18) and (start_min >=29):
						rate=4
						return 4
					else:
						rate=6
						return 6




def check_nite(start_hr, start_min, day):
	if (day <=5) and (start_hr>=21) and (start_min >=30):
		return True
	else:
		return False



def get_fee(rate, num_games, num_people, day, is_nite, is_holiday):
	cost=(rate*num_games)*num_people
	if is_holiday== True: 
		return ('Happy holidays! your total is $', cost, '.')
	else: 
		if is_nite== True:
			if day <=4
				rate=7
				num_games=1
				return ('nite special! your total is $', cost,'.')
			else:
				rate=14
				num_games=1
				return 14
		else:
			if (day == 6) and (num_people>=4):
				rate=2
				return ('thrifty sunday! your total is $', cost, '.')
			else:
				return ('your total is $', cost,'.')

2 Ответов

Рейтинг:
1

Patrice T

Даже если я не являюсь пользователем Java, я вижу, что вы пытаетесь вернуть 3 значения в этой строке

return ('Happy holidays! your total is $', cost, '.')

Я подозреваю, что это неправильно. Эта строка не будет строить строку из 3 значений.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

Peter Leow

Есть много проблем с вашим кодом:
1. Ваш код очень запутан и пронизан множеством операторов if else, многие из которых могут быть лучше организованы с помощью if..elif..else.
2. Вы устанавливаете переменную скорость в функции get_rate но никогда не использовал его, почему?
3. в этой функции:

def get_fee(rate, num_games, num_people, day, is_nite, is_holiday):
, некоторые из вашего кода присваивают значения аргументам функции вместо того, чтобы использовать их, например
rate=7
num_games=1
и после этого они никогда не используются.
4. Следите за синтаксическими ошибками, например
if day <=4
Приведите свой дом в порядок, прежде чем рассматривать какие-либо испытания.