Я пытаюсь перейти на Python. Вот что у меня есть на данный момент:
def ldExtractFromLine (ldline, post): post -= 1 # mjh t = [] s = ldline.strip() iT = 0; # mjh while s <> »: s = s.strip() + ‘ ‘ i = 0 # mjh while s[i] <> ‘ ‘: i += 1 # t[iT] = Copy(s, 1, i-1) # function Copy(const S: string; From: integer = 1; Count: integer = MaxInt): string; t.insert(iT, s[0:i-1+1]) # mjh iT += 1 s = s[i:(i+len(s)+1)] print «lala» result = » if post < iT: result = t[post] # mjh return result
Однако выполнение подпрограммы приводит к бесконечному напечатанному «лала» на стандартный вывод. Проблема в том, что списки Паскаля начинаются с индекса 1, а списки Python начинаются с индекса 0. Это меня действительно сбивает с толку. Кто-нибудь может найти мою ошибку? Переменная post представляет собой целое число, обычно меньше 20. Переменная ldline представляет собой строку, которая выглядит примерно как «1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat» .
Весь сценарий можно посмотреть здесь:
Программа на Паскале Угадай число. Переменные, случайные числа, условные переходы
Вот несколько примеров входных данных:
0 Safe House 0 Name: building_013_safehouse.ldr 0 Author: Kevin Loch 0 ROTATION CENTER 0 0 0 1 «Custom» 0 ROTATION CONFIG 0 0 1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 60 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -20 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -100 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat 1 0 -180 -24 -160 1 0 0 0 1 0 0 0 1 3001.dat
Больше примеров входных данных можно найти здесь:
Источник: question-it.com
Перевод кода с циклом из Pascal в Python
Я сделал такой перевод, но он не правильный, т.к выдает совершенно другие значения при одинаковых входных данных:
n = int(input()) c = 0 for n10 in range (0, n // 10): for n5 in range (0, n // 5): for n2 in range (0, n // 2): if n — 10 * n10 — 5 * n5 — 2 * n2 >= 0: c = c + 1 print(c)
Отслеживать
15.9k 3 3 золотых знака 24 24 серебряных знака 41 41 бронзовый знак
задан 19 ноя 2019 в 18:01
Mikey_mouse Mikey_mouse
179 6 6 серебряных знаков 17 17 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Ваша проблема в том, что в пайтоне range исключает последний индекс:
n = int(input()) c = 0 for n10 in range (0, n // 10 + 1): for n5 in range (0, n // 5 + 1): for n2 in range (0, n // 2 + 1): if n — 10 * n10 — 5 * n5 — 2 * n2 >= 0: c = c + 1 print(c)
Отслеживать
ответ дан 19 ноя 2019 в 19:54
15.9k 3 3 золотых знака 24 24 серебряных знака 41 41 бронзовый знак
Хм, очень логичное поведение.
20 ноя 2019 в 7:59
Порадуйте преподавателя переводом на Python в функциональном стиле:
from itertools import product, starmap from functools import reduce from operator import mul,add n = int(input(«n 1» при выполнении требуемого условия, а потом мы вычисляем его длину. В Python для списка a авполняется len(a) == a.__len__() .
Первый язык программирования: Python vs Pascal
Так что если не считать импортов то решение вышло в одну затейливую строчку ))
Отслеживать
ответ дан 20 ноя 2019 в 13:37
Vasyl Kolomiets Vasyl Kolomiets
3,991 5 5 золотых знаков 24 24 серебряных знака 45 45 бронзовых знаков
- python
- pascal
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com
Python-сообщество
- Начало
- » Центр помощи
- » Помогите перевести с Паскаля на Питон, пожалуйста!
#1 Дек. 29, 2014 21:51:56
Помогите перевести с Паскаля на Питон, пожалуйста!
С наступающим Новым Годом, уважаемые форумчане! Помогите, пожалуйста, перевести с Паскаля на Питон
Вот задача:
Написать программу, которая квадратной матрице (10х10) находит произведение ненулевых диагональных элементов.
Моё решение на Паскале:
program abc;
var
a: array of longint;
i, j: byte;
mult: longint;
begin
randomize;
for i:=1 to 10 do begin
for j:=1 to 10 do begin
a := random(5);
write(a:4);
end;
writeln;
end;
mult := 1;
for i:=1 to 10 do
if a <> 0 then
mult := mult * a;
for i:=1 to 10 do
if (a <> 0) and (i <> 10-i+1) then
mult := mult * a;
writeln(mult);
readln;
end.
#2 Дек. 29, 2014 22:21:26
Помогите перевести с Паскаля на Питон, пожалуйста!
from random import randint matrix = [[randint(0, 10) for y in range(10)] for x in range(10)] m =1 for i in range(10): if matrix[i][i]: m *= matrix[i][i] print(m)
#3 Дек.
29, 2014 22:46:51
Помогите перевести с Паскаля на Питон, пожалуйста!
from random import randint matrix = [[randint(0, 10) for y in range(10)] for x in range(10)] m = [matrix[i][i] for i in range(10) if matrix[i][i]] m = reduce(lambda x, y: x*y, m) if m else 0 print(m)
Alen а что если все диагональные элементы равны нулю? у Вас выдаст одникавый результат если все элементы равны нулю и если все элементы равны еденице!
Источник: python.su