Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
StringCalculator
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lasse Pikkemaat
StringCalculator
Merge requests
!15
Develop
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Develop
develop
into
main
Overview
0
Commits
16
Pipelines
0
Changes
25
Merged
Lasse Pikkemaat
requested to merge
develop
into
main
2 months ago
Overview
0
Commits
16
Pipelines
0
Changes
25
Expand
0
0
Merge request reports
Compare
main
main (base)
and
latest version
latest version
bf16e398
16 commits,
2 months ago
25 files
+
1059
−
5
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
25
Search (e.g. *.vue) (Ctrl+P)
others/Alma/AlmaStringCalculator.py
0 → 100644
+
98
−
0
Options
from
abc
import
ABC
,
abstractmethod
import
unittest
from
src.stringcalculator
import
StringCalculator
#Auskommentieren, falls andere Implementierung genutzt wird
'''
class IStringCalculator(ABC):
@abstractmethod
def add(self, numbers: str) -> int:
pass
class StringCalculator(IStringCalculator):
def add(self, numbers: str) -> int:
if not numbers:
return 0
# Überprüfe, ob ein benutzerdefiniertes Trennzeichen angegeben ist
if numbers.startswith(
"
//
"
):
delimiter_line_end = numbers.find(
"
\n
"
)
delimiter = numbers[2:delimiter_line_end] # Extrahiere das Trennzeichen
numbers = numbers[delimiter_line_end + 1:] # Entferne die erste Zeile mit dem Trennzeichen
else:
delimiter =
'
,
'
# Standard-Trennzeichen ist Komma, wenn keine Zeile mit dem Trennzeichen vorhanden ist
# Ersetze alle Vorkommen des Trennzeichens und teile die Eingabe
numbers = numbers.replace(
"
\n
"
, delimiter)
nums = numbers.split(delimiter)
# Filtere alle Zahlen, die größer als 1000 sind
nums = [int(num) for num in nums if int(num) <= 1000]
# Prüfe auf negative Zahlen
negatives = [num for num in nums if num < 0]
if negatives:
# Wenn negative Zahlen vorhanden sind, werfe eine Ausnahme
raise ValueError(f
"
Negatives not allowed: {
'
,
'
.join(map(str, negatives))}
"
)
# Berechne die Summe der Zahlen, die <= 1000 sind
return sum(nums)
'''
class
TestStringCalculator
(
unittest
.
TestCase
):
def
setUp
(
self
):
self
.
calculator
=
StringCalculator
()
def
test_empty_string
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
""
),
0
)
def
test_single_number
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
1
"
),
1
)
def
test_two_numbers
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
1,2
"
),
3
)
def
test_multiple_numbers
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
1,2,3,4,5
"
),
15
)
def
test_numbers_with_newline
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
1
\n
2,3
"
),
6
)
def
test_numbers_with_multiple_newlines
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
1
\n
2
\n
3
\n
4
\n
5
"
),
15
)
def
test_negative_number
(
self
):
with
self
.
assertRaises
(
ValueError
)
as
context
:
self
.
calculator
.
add
(
"
1,-2,3
"
)
self
.
assertEqual
(
str
(
context
.
exception
),
"
Negatives not allowed: -2
"
)
def
test_multiple_negative_numbers
(
self
):
with
self
.
assertRaises
(
ValueError
)
as
context
:
self
.
calculator
.
add
(
"
1,-2,-3,4
"
)
self
.
assertEqual
(
str
(
context
.
exception
),
"
Negatives not allowed: -2, -3
"
)
def
test_custom_delimiter
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
//;
\n
1;2
"
),
3
)
def
test_custom_delimiter_with_newline
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
//;
\n
1;2
\n
3
"
),
6
)
def
test_custom_delimiter_with_multiple_numbers
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
//|
\n
1|2|3|4
"
),
10
)
def
test_numbers_greater_than_1000
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
2,1001
"
),
2
)
def
test_numbers_greater_than_1000_with_custom_delimiter
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
//;
\n
2;1001
"
),
2
)
def
test_long_delimiter
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
//[***]
\n
1***2***3
"
),
6
)
def
test_long_delimiter_with_multiple_numbers
(
self
):
self
.
assertEqual
(
self
.
calculator
.
add
(
"
//[---]
\n
1---2---3---4
"
),
10
)
if
__name__
==
"
__main__
"
:
unittest
.
main
()
# python -m unittest others.Alma.AlmaStringCalculator -v
\ No newline at end of file
Loading