mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-11 09:01:44 -04:00
Co-authored-by: Kolade Chris <65571316+Ksound22@users.noreply.github.com> Co-authored-by: Huyen Nguyen <25715018+huyenltnguyen@users.noreply.github.com>
206 lines
4.9 KiB
Markdown
206 lines
4.9 KiB
Markdown
---
|
|
id: 6821ecb9237de8297eaee7a3
|
|
title: "Python Challenge 21: Hex Generator"
|
|
challengeType: 29
|
|
dashedName: python-challenge-21
|
|
---
|
|
|
|
# --description--
|
|
|
|
Given a named CSS color string, generate a random hexadecimal (hex) color code that is dominant in the given color.
|
|
|
|
- The function should handle `"red"`, `"green"`, or `"blue"` as an input argument.
|
|
- If the input is not one of those, the function should return `"Invalid color"`.
|
|
- The function should return a random six-character hex color code where the input color value is greater than any of the others.
|
|
- Example of valid outputs for a given input:
|
|
|
|
| Input | Output |
|
|
|---------|----------|
|
|
| `"red"` | `"FF0000"` |
|
|
| `"green"` | `"00FF00"` |
|
|
| `"blue"` | `"0000FF"` |
|
|
|
|
# --hints--
|
|
|
|
`generate_hex("yellow")` should return `"Invalid color"`.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
TestCase().assertEqual(generate_hex("yellow"), "Invalid color")`);
|
|
}})
|
|
```
|
|
|
|
`generate_hex("red")` should return a six-character string.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
TestCase().assertEqual(len(generate_hex("red")), 6)`);
|
|
}})
|
|
```
|
|
|
|
`generate_hex("red")` should return a valid six-character hex color code.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
|
|
hex = generate_hex("red").upper()
|
|
is_valid_hex = len(hex) == 6 and all(c in "0123456789ABCDEF" for c in hex)
|
|
TestCase().assertTrue(is_valid_hex)`)
|
|
}})
|
|
```
|
|
|
|
`generate_hex("red")` should return a valid hex color with a higher red value than other colors.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
|
|
hex = generate_hex("red").upper()
|
|
is_valid_hex = len(hex) == 6 and all(c in "0123456789ABCDEF" for c in hex)
|
|
TestCase().assertTrue(is_valid_hex)
|
|
|
|
r = int(hex[:2], 16)
|
|
g = int(hex[2:4], 16)
|
|
b = int(hex[4:], 16)
|
|
|
|
TestCase().assertGreater(r, g)
|
|
TestCase().assertGreater(r, b)`)
|
|
}})
|
|
```
|
|
|
|
Calling `generate_hex("red")` twice should return two different hex color values where red is dominant.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
|
|
hex1 = generate_hex("red").upper()
|
|
is_valid_hex1 = len(hex1) == 6 and all(c in "0123456789ABCDEF" for c in hex1)
|
|
TestCase().assertTrue(is_valid_hex1)
|
|
|
|
r1 = int(hex1[:2], 16)
|
|
g1 = int(hex1[2:4], 16)
|
|
b1 = int(hex1[4:], 16)
|
|
|
|
TestCase().assertGreater(r1, g1)
|
|
TestCase().assertGreater(r1, b1)
|
|
|
|
hex2 = generate_hex("red").upper()
|
|
is_valid_hex2 = len(hex2) == 6 and all(c in "0123456789ABCDEF" for c in hex2)
|
|
TestCase().assertTrue(is_valid_hex2)
|
|
|
|
r2 = int(hex2[:2], 16)
|
|
g2 = int(hex2[2:4], 16)
|
|
b2 = int(hex2[4:], 16)
|
|
|
|
TestCase().assertGreater(r2, g2)
|
|
TestCase().assertGreater(r2, b2)
|
|
TestCase().assertNotEqual(hex1, hex2)`);
|
|
}})
|
|
```
|
|
|
|
Calling `generate_hex("green")` twice should return two different hex color values where green is dominant.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
|
|
hex1 = generate_hex("green").upper()
|
|
is_valid_hex1 = len(hex1) == 6 and all(c in "0123456789ABCDEF" for c in hex1)
|
|
TestCase().assertTrue(is_valid_hex1)
|
|
|
|
r1 = int(hex1[:2], 16)
|
|
g1 = int(hex1[2:4], 16)
|
|
b1 = int(hex1[4:], 16)
|
|
|
|
TestCase().assertGreater(g1, r1)
|
|
TestCase().assertGreater(g1, b1)
|
|
|
|
hex2 = generate_hex("green").upper()
|
|
is_valid_hex2 = len(hex2) == 6 and all(c in "0123456789ABCDEF" for c in hex2)
|
|
TestCase().assertTrue(is_valid_hex2)
|
|
|
|
r2 = int(hex2[:2], 16)
|
|
g2 = int(hex2[2:4], 16)
|
|
b2 = int(hex2[4:], 16)
|
|
|
|
TestCase().assertGreater(g2, r2)
|
|
TestCase().assertGreater(g2, b2)
|
|
TestCase().assertNotEqual(hex1, hex2)`);
|
|
}})
|
|
```
|
|
|
|
Calling `generate_hex("blue")` twice should return two different hex color values where blue is dominant.
|
|
|
|
```js
|
|
({test: () => { runPython(`
|
|
from unittest import TestCase
|
|
|
|
hex1 = generate_hex("blue").upper()
|
|
is_valid_hex1 = len(hex1) == 6 and all(c in "0123456789ABCDEF" for c in hex1)
|
|
TestCase().assertTrue(is_valid_hex1)
|
|
|
|
r1 = int(hex1[:2], 16)
|
|
g1 = int(hex1[2:4], 16)
|
|
b1 = int(hex1[4:], 16)
|
|
|
|
TestCase().assertGreater(b1, r1)
|
|
TestCase().assertGreater(b1, g1)
|
|
|
|
hex2 = generate_hex("blue").upper()
|
|
is_valid_hex2 = len(hex2) == 6 and all(c in "0123456789ABCDEF" for c in hex2)
|
|
TestCase().assertTrue(is_valid_hex2)
|
|
|
|
r2 = int(hex2[:2], 16)
|
|
g2 = int(hex2[2:4], 16)
|
|
b2 = int(hex2[4:], 16)
|
|
|
|
TestCase().assertGreater(b2, r2)
|
|
TestCase().assertGreater(b2, g2)
|
|
TestCase().assertNotEqual(hex1, hex2)`);
|
|
}})
|
|
```
|
|
|
|
# --seed--
|
|
|
|
## --seed-contents--
|
|
|
|
```py
|
|
def generate_hex(color):
|
|
|
|
return color
|
|
```
|
|
|
|
# --solutions--
|
|
|
|
```py
|
|
import random
|
|
def generate_hex(color):
|
|
def to_hex(n):
|
|
return hex(n)[2:].upper().zfill(2)
|
|
|
|
dominant = random.randint(170, 255)
|
|
weak1 = random.randint(0, 169)
|
|
weak2 = random.randint(0, 169)
|
|
|
|
if color.lower() == "red":
|
|
r = dominant
|
|
g = weak1
|
|
b = weak2
|
|
elif color.lower() == "green":
|
|
r = weak1
|
|
g = dominant
|
|
b = weak2
|
|
elif color.lower() == "blue":
|
|
r = weak1
|
|
g = weak2
|
|
b = dominant
|
|
else:
|
|
return "Invalid color"
|
|
|
|
return f'{to_hex(r)}{to_hex(g)}{to_hex(b)}'
|
|
```
|